快速搭建PayPal标准API测试框架

根据PayPal官方Postman指引页快速搭建标准API测试框架(https://developer.paypal.com/api/rest/postman/)

一、第一步:官网一键导入PayPal官方完整REST接口集合(核心)

  1. 浏览器打开官方指引页面:https://developer.paypal.com/api/rest/postman/
    页面分为两个导入按钮:
  • Import Sandbox Collection沙盒测试环境(虚拟订单,测试用)
  • Import Live Collection正式生产环境(GRW商户真实业务,你当前使用)→点击这个
  1. 点击Import Live Collection→弹窗选择【Open in Postman】,自动跳转Postman客户端/网页端一键导入PayPal全套V2 REST接口(包含订单、捕获、退款、对账等全接口,不用手动新建接口URL)。

✅ 导入自动生成两样东西:

① Collection:PayPal REST API Live(PayPal官方封装完整接口)

② Environment:PayPal Live Environment(官方预定义环境变量:baseUrlclientIdclientSecret

二、第二步:填入GRW商户正式API密钥(配置环境)

  1. 登录PayPal开发者后台 developer.paypal.com(GRW Trading FZE主管理员账号)→Apps & CredentialsLive→打开已创建的Live应用,复制:

    • Client ID
    • Client Secret
  2. Postman左侧【Environments】→打开PayPal Live Environment

    变量 填写内容 备注
    baseUrl https://api.paypal.com 官方已经预填好,无需修改
    clientId 粘贴Live ClientID 正式商户密钥
    clientSecret 粘贴Live Client Secret 正式商户密钥

保存环境,右上角选中PayPal Live Environment

三、第三步:使用官方自带Token获取接口(废弃你之前手动写的01_GetToken)

导入的官方集合内自带目录:AuthenticationGenerate OAuth2 Access Token

  1. 该接口是PayPal官方写好的获取Bearer Token请求:
    • Authorization=Basic Auth,自动引用环境{``{clientId}}/{``{clientSecret}}
    • Body自带grant_type=client_credentials
    • Tests内置自动脚本:请求成功后自动把access_token存入环境变量 ,后续全接口直接{``{access_token}}鉴权。

不再需要手动编写获取Token的请求,官方原生适配PayPal鉴权规则。

配套优化:解决【每轮Run重复请求Token】

打开Generate OAuth2 Access Token → Pre-request Script,粘贴跳过脚本:

javascript 复制代码
//非第一轮循环,直接跳过Token请求
let index = Number(pm.environment.get("loopIndex"));
if(index > 0){
    pm.execution.skipRequest();
    console.log("非首轮,跳过OAuth获取");
}

四、第四步:在官方框架内新增你的批量查询接口(适配多CaptureID批量查询)

PayPal REST API Live集合里新建自定义文件夹Batch_Capture_Query,新增2个GET请求:

请求1:Query_Capture_Detail(查扣款)

URL:{``{baseUrl}}/v2/payments/captures/{``{currentCaptureId}}

  • Authorization:Bearer Token → {``{access_token}}
  • Pre-request Script(从数组取当前ID)
js 复制代码
let arr = JSON.parse(pm.environment.get("captureList"));
let idx = Number(pm.environment.get("loopIndex"));
pm.environment.set("currentCaptureId",arr[idx]);
  • Tests(提取OrderID+下标自增)
js 复制代码
let res = pm.response.json();
let oid = res.supplementary_data.related_ids.order_id;
pm.environment.set("orderId",oid);
let newIdx = Number(pm.environment.get("loopIndex"))+1;
pm.environment.set("loopIndex",newIdx);

请求2:Query_Order_FullData(查全量订单:买家/地址/商品/税费)

URL:{``{baseUrl}}/v2/checkout/orders/{``{orderId}}

  • Authorization:Bearer Token → {``{access_token}}
  • Tests(提取需要的业务字段,用于批量导出)
js 复制代码
let orderData = pm.response.json();
//买家信息
let buyerName = `${orderData.payer.name?.given_name||""} ${orderData.payer.name?.surname||""}`;
let buyerEmail = orderData.payer.email_address;
//收货地址、税费、支付来源
let shipAddress = orderData.purchase_units[0].shipping?.address||{};
let taxValue = orderData.purchase_units[0].amount.breakdown?.tax?.value||"0";
let paySource = orderData.payment_source ? Object.keys(orderData.payment_source)[0]:"PayPal余额";
//存入全局变量,批量导出CSV
pm.globals.set("buyerName",buyerName);
pm.globals.set("buyerMail",buyerEmail);
pm.globals.set("tax",taxValue);
pm.globals.set("paySource",paySource);

五、第五步:补充批量环境变量+集合全局初始化

  1. 打开PayPal Live Environment环境,追加4个变量:
    |变量名|初始值|
    |----|----|
    |captureList|["2M331120UK046314S","1PJ581750B801442J"]|
    |loopIndex|0|
    |currentCaptureId|空|
    |orderId|空|
  2. 双击顶层集合PayPal REST API Live→Pre-request Script(集合全局脚本)
js 复制代码
//整批批量仅启动时初始化1次下标,全生命周期只执行一次
pm.environment.set("loopIndex",0);

点击Update保存。

六、第六步:批量一键Run运行

  1. 集合右侧▶Run打开Runner
    • Environment:PayPal Live Environment
    • Iterations(迭代数):2(数组内2个CaptureID)
    • 执行顺序从上至下:
      ① Generate OAuth2 Access Token
      ② Query_Capture_Detail
      ③ Query_Order_FullData
  2. Start run

运行逻辑:

第一轮:获取Token→取数组下标0第一个ID查单→下标+1

第二轮:跳过Token请求→取下标1第二个ID查单→下标+2,两条不同订单数据,不再重复

七、沙盒环境快速切换方法

如需测试虚拟订单,回到官网页面点击Import Sandbox Collection,导入沙盒专用集合,baseUrl自动变为https://api-m.sandbox.paypal.com,填入沙盒ClientID/Secret即可。

框架优势

  1. 官方原生接口:所有URL、字段跟随PayPal官方版本更新,避免手写接口地址出错;
  2. 统一环境变量baseUrl:切换沙盒/正式只需要换环境,不用逐个改接口域名;
  3. 鉴权标准化:官方OAuth逻辑,杜绝401/域名密钥不匹配报错。
相关推荐
君顾15 小时前
上海24小时自助健身房系统开发实战指南:从架构设计到落地部署
java·开发语言·健身房
香菜TTT5 小时前
大模型上下文协议(MCP):AI 应用的“USB-C”接口技术
开发语言·人工智能·经验分享
aramae5 小时前
模拟实现strlen()函数 (C语言)
c语言·开发语言·后端
jimy17 小时前
readelf 查看“派生类”的vtable符号
开发语言·c++
ctlover7 小时前
排序与查找算法详解
开发语言·python
YYYing.7 小时前
【C++进阶系列 (七)】C++ RTTI 深度剖析:从 typeid 到 dynamic_cast 的底层之旅
开发语言·c++·c/c++·rtti
nvvas8 小时前
Java 入门(四):数组——数据的集合管理
java·开发语言
Y3815326629 小时前
SERP 数据清洗实战:字段标准化、日期解析与去重键
开发语言·数据库·python·python数据库
君顾19 小时前
本地城市低空经济管理系统定制:城市级低空运营平台架构与落地实战
java·开发语言·飞手
多多鼠10 小时前
System Prompt 的“版本漂移”问题:从变更管理到 A/B 测试体系
开发语言·网络·人工智能·python·langchain