如何在PHP中从PayPal cURL响应中获取支付参考号
你当前调用的是PayPal v1支付接口的创建支付单接口,仅完成了支付单的初始化,状态为created,此时还未完成用户授权和支付执行流程,因此交易相关的支付参考号还未生成,related_resources字段为空属于正常情况。
解决步骤
- 第一步:从当前返回的
links数组中找到rel为approval_url的跳转链接,将用户引导至该地址完成PayPal账户的支付授权。用户授权完成后会自动跳转回你在支付参数$paymentJson中预设的回调地址,回调请求会携带payer_id和token两个参数。 - 第二步:拿到
payer_id参数后,调用当前返回中rel为execute的POST接口,提交payer_id参数完成支付执行操作。 - 第三步:支付执行成功后,返回的响应结构中,
transactions[0]['related_resources'][0]['sale']['id']就是你需要的支付参考号(PayPal官方交易号),同时也可以从该层级下获取交易状态、交易完成时间等相关信息。
支付执行示例代码
// 支付执行示例代码 $executeUrl = "https://api.sandbox.paypal.com/v1/payments/payment/{$result['id']}/execute"; $postData = json_encode([ 'payer_id' => $_GET['PayerID'] // 从回调请求参数中获取 ]); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $executeUrl, CURLOPT_RETURNTRANSFER => true, CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => $postData, CURLOPT_HTTPHEADER => array( 'Authorization: Bearer ' . $accessToken, 'Content-Type: application/json' ) )); $executeResponse = curl_exec($curl); curl_close($curl); $executeResult = json_decode($executeResponse, true); // 支付完成后获取支付参考号 if (isset($executeResult['state']) && $executeResult['state'] == 'approved') { $paymentReferenceId = $executeResult['transactions'][0]['related_resources'][0]['sale']['id']; // 后续业务逻辑处理 }
补充说明:你当前使用的
v1/payments属于PayPal旧版支付接口,若为新开发项目可升级到v2/checkout接口,接口逻辑更简洁,维护性更强。
内容的提问来源于stack exchange,提问作者Ashwini Karpe
相关产品推荐
相关产品推荐

