Postman批量CaptureID全自动查询配置(2个ID:2M331120UK046314S、1PJ581750B801442J,彻底修复循环重复取同IDBUG)
核心优化:循环下标loopIndex仅在【集合全局前置脚本】初始化1次,不再在Token接口重置下标,两次循环自动分别取2个不同CaptureID
执行链路:批量初始化下标→每轮:获取Token→取单个CaptureID查扣款→自动提取OrderID→查订单全量(买家/地址/商品/税费)
步骤1:新建专用环境变量(Environments)
- Postman左侧【Environments】→New,环境命名:
PayPal_GRW_Live_Batch - 新增5个环境变量,初始值填写如下:
| 变量名 | Initial Value(初始值) | 说明 |
|---|---|---|
| captureList | ["2M331120UK046314S","1PJ581750B801442J"] |
JSON数组存放全部待查CaptureID(2条数据) |
| loopIndex | 0 |
遍历下标,集合脚本统一初始化,接口不再重置 |
| currentCaptureId | (空白) | 脚本自动赋值当前轮查询的捕获ID |
| orderId | (空白) | 从Capture返回自动解析订单号 |
| access_token | (空白) | OAuth鉴权令牌,Token接口自动存入 |
- Save保存,右上角环境下拉框选中:PayPal_GRW_Live_Batch(必须选中环境变量生效)
步骤2:新建Collection(集合)+ 配置【集合级前置脚本】(关键!解决循环重复问题)
- 新建Collection:
PayPal_批量查PayPal订单 - 双击集合名称→切换到【Pre-request Script】(集合级脚本:整批批量任务只在最开始运行1次,每轮迭代不会重复执行 )
粘贴初始化代码:
javascript
// 全量批量开始前仅执行1次,下标归零,只初始化一次
pm.environment.set("loopIndex", 0);
console.log("批量任务启动,下标初始化=0");
❗ 从此删除Token接口内所有
loopIndex=0的代码,杜绝每次循环重置下标导致重复查同ID。
在集合内新建3个请求(固定从上到下顺序:01→02→03)
请求①:01_GetToken【POST 获取鉴权令牌】
URL:
https://api.paypal.com/v1/oauth2/token(Live正式域名,无-m)
-
Authorization标签 → Basic Auth
- Username:GRW商户Live Client ID
- Password:GRW商户Live Client Secret
-
Body标签 →
x-www-form-urlencodedkey value grant_type client_credentials -
Tests标签(仅保存access_token,无任何loopIndex赋值代码!)
javascript
pm.test("Token保存成功", function () {
let resJson = pm.response.json();
pm.environment.set("access_token", resJson.access_token);
});
请求②:02_QueryCaptureDetail【GET 查询扣款详情】
URL:
https://api.paypal.com/v2/payments/captures/{``{currentCaptureId}}
- Authorization → Bearer Token,Token值:
{``{access_token}} - Pre-request Script(请求发送前,按下标从数组取出当前CaptureID)
javascript
// 读取ID数组与游标
let captureArr = JSON.parse(pm.environment.get("captureList"));
let index = Number(pm.environment.get("loopIndex"));
// 赋值当前需要查询的ID
pm.environment.set("currentCaptureId", captureArr[index]);
console.log("本轮查询CaptureID:" + captureArr[index]);
- Tests标签(接口返回后:提取OrderID + 下标自增,准备下一轮)
javascript
let resp = pm.response.json();
// 提取关联订单号存入环境
let orderNo = resp.supplementary_data.related_ids.order_id;
pm.environment.set("orderId", orderNo);
// 下标+1,供下一轮循环使用
let nextIndex = Number(pm.environment.get("loopIndex")) + 1;
pm.environment.set("loopIndex", nextIndex);
console.log("下标自增为:" + nextIndex);
请求③:03_QueryOrderFullInfo【GET 查询全量订单(买家/地址/商品/税费)】
URL:
https://api.paypal.com/v2/checkout/orders/{``{orderId}}
- Authorization → Bearer Token,Token:
{``{access_token}} - Tests标签(可选:提取关键字段存入全局变量,后续批量导出Excel/CSV)
javascript
let orderData = pm.response.json();
let capId = pm.environment.get("currentCaptureId");
let ordId = pm.environment.get("orderId");
// 1.买家姓名&邮箱
let buyerName = `${orderData.payer.name?.given_name||""} ${orderData.payer.name?.surname||""}`;
let buyerMail = orderData.payer.email_address;
// 2.收货地址
let shipAddr = orderData.purchase_units[0].shipping?.address || {};
//3.税费金额
let taxVal = orderData.purchase_units[0].amount.breakdown?.tax?.value || "0";
//4.支付来源(信用卡/PayPal余额)
let paySource = orderData.payment_source ? Object.keys(orderData.payment_source)[0] : "PayPal余额";
//5.下单来源URL
let sourceUrl = orderData.application_context?.return_url || "";
//存入全局变量,导出报表使用
pm.globals.set("capId",capId);
pm.globals.set("ordId",ordId);
pm.globals.set("buyerName",buyerName);
pm.globals.set("buyerMail",buyerMail);
pm.globals.set("tax",taxVal);
pm.globals.set("paySource",paySource);
步骤3:一键批量自动运行(Collection Runner)
- 点击集合
PayPal_批量查PayPal订单右侧 ▶【Run】打开批量运行面板 - Runner配置:
- Environment:下拉选中
PayPal_GRW_Live_Batch - Iterations(迭代次数):2(数组内一共2个CaptureID,必须填2)
- 执行顺序:从上到下
01_GetToken →02_QueryCaptureDetail→03_QueryOrderFullInfo - 勾选【Save responses】(保存全部接口返回报文)
- Environment:下拉选中
- 点击蓝色【Run PayPal_批量查PayPal订单】
运行逻辑(2轮循环不再重复)
- 批量启动:集合前置脚本
loopIndex=0(仅执行1次) - 第1轮:01拿Token→02取下标0=ID1
2M331120UK046314S→查Capture→提取Order→03查订单;下标变成1 - 第2轮:01复用Token→02取下标1=ID2
1PJ581750B801442J→查Capture→提取Order→03查订单;下标变成2
步骤4:批量导出所有订单明细CSV
- Run结束后,右侧运行结果页点击【Export】→Export Results,格式选CSV,Excel直接打开,包含:CaptureID、订单号、买家姓名、邮箱、税费、支付方式、全量返回报文。
步骤5:后续新增CaptureID方法
打开环境PayPal_GRW_Live_Batch,修改captureList数组,在\[\]内追加"新ID",修改Runner迭代次数=数组元素总数量,重新Run即可。
订单返回关键字段对照表(03接口返回JSON)
| 需要获取的数据 | JSON字段路径 |
|---|---|
| 买家姓名/邮箱 | payer.name.given_name/surname、payer.email_address |
| 收货地址 | purchase_units[0].shipping.address(国家/城市/邮编/街道) |
| 商品明细 | purchase_units[0].items[](商品名、单价、数量) |
| 订单税费 | purchase_units[0].amount.breakdown.tax.value |
| 付款卡/支付类型 | payment_source(VISA/万事达/PayPal余额,PayPal不返回完整卡号) |
| 下单来源 | application_context.return_url(跳转下单网站) |
避坑说明
- URL区分:Live正式密钥必须
api.paypal.com,api-m.paypal.com是沙盒,混用直接401报错; - 禁止在01接口任何位置写
loopIndex=0(之前重复取值的根本原因); - Token有效期约9小时,短时间多次批量无需重复手动跑01。