当前位置: 代码迷 >> 综合 >> Paypal Express Checkout快速结账API心得--Star.Hou
  详细解决方案

Paypal Express Checkout快速结账API心得--Star.Hou

热度:18   发布时间:2024-01-31 17:50:00.0

借用百度百科一句话介绍它吧:
PayPal是全球使用最为广泛的第三方支付工具之一。针对具有国际收付款需求用户设计的账户类型。

其在跨境电商行业尤为重要。
遂今日整理开发对接API,为开发笔记学习使用吧。

一般的支付厂商API集成对接规律:
1、商务签约
2、厂商提供测试账户、开发文档、SDK等。
3、商户技术对接、测试、上线。
4、网站开始收款、财务对账

Paypal理应也是如此。这里记录关于技术API对接感想。

官方开发地址:https://developer.paypal.com/docs/payflow/express-checkout/#user-experience

Paypal快捷支付分三步走:
在这里插入图片描述

第一步:SetExpressCheckout

将买家重定向到PayPal
收到SetExpressCheckout响应后,将买家重定向到PayPal,并将附加TOKEN到重定向URL。
https://www.paypal.com/checkoutnow?token=EC token
https://www.sandbox.paypal.com/checkoutnow?token=EC token
用户这个时候:进入Pay??Pal付款页面后,用户将执行以下操作:
登录到贝宝。
选择运输和资金来源。
继续交易并返回您的站点。
返回URL是您在SetExpressCheckoutAPI请求中指定的URL 。PayPal将PayerID和附加token到返回URL。
https://example.com/return?token=EC-7BX27754BT8623257&PayerID=UPGGM5VND8D5Q
调用Paypal第一个接口:SetExpressCheckout

请求示例:

"resquest": {"RETURNURL": "https:\/\/www.xxx.com\/callback?order_id=xxxx&type=credit","CANCELURL": "https:\/\/www.xxx.com\\/payment\/?order_id=xxx","LOCALECODE": "MX","PAYMENTREQUEST_0_CUSTOM": "自定义","PAYMENTREQUEST_0_INVNUM": "自定义","LOGOIMG": "https:\/\/www.xxx.com\/resources-mobile\/images\/paypal_logo.jpg","BRANDNAME": "xxx Inc.","LANDINGPAGE": "Billing","PAYMENTREQUEST_0_PAYMENTACTION": "Sale","L_PAYMENTREQUEST_0_QTY0": 1,"L_PAYMENTREQUEST_0_NAME0": "自定义","PAYMENTREQUEST_0_SHIPTONAME": "账单姓名","PAYMENTREQUEST_0_SHIPTOSTREET": "账单地址","PAYMENTREQUEST_0_SHIPTOSTREET2": "","PAYMENTREQUEST_0_SHIPTOCITY": "账单城市","PAYMENTREQUEST_0_SHIPTOSTATE": "账单信息","PAYMENTREQUEST_0_SHIPTOZIP": "账单邮编","PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE": "MX","PAYMENTREQUEST_0_SHIPTOPHONENUM": "电话","EMAIL": "邮箱","PAYMENTREQUEST_0_CURRENCYCODE": "MXN","PAYMENTREQUEST_0_AMT": 11.91,"PAYMENTREQUEST_0_ITEMAMT": 11.35,"PAYMENTREQUEST_0_SHIPPINGAMT": "运费","L_PAYMENTREQUEST_0_AMT0": 13.35,"MAXAMT": 15.91,"PWD": "paypal密码","USER": "paypal账户用户","SIGNATURE": "paypal签名"},

响应:

	"response": {"TOKEN": "EC-22222222222222222","TIMESTAMP": "2020-07-24T03:08:56Z","CORRELATIONID": "aaaaaggggggggg","ACK": "Success","VERSION": "65.1","BUILD": "223444444"}

第二步:GetExpressCheckoutDetails

用户在paypal付款完成后,回跳到商户网站的callback url地址。
如https://www.xxx.com/callback?order_id=xxxx&type=credit
根据返回的TOKEN,
调用Paypal第二个接口:GetExpressCheckoutDetails
获取这笔交易详细信息:

请求:
    USER=usernameVENDOR=vendorPARTNER=PayPalPWD=passwordTRXTYPE=STENDER=PACTION=GTOKEN=EC-561546500C9429808

第三步:DoExpressCheckout付款

调用Paypal第三个接口:DoExpressCheckout
这一步是商户从Paypal,请求Paypal把用户的资金转移到商户自己的账户里的动作。

请求示例:
"TOKEN=EC-52C61439V0665821V PAYERID=222222 PAYMENTREQUEST_0_PAYMENTACTION=Sale PAYMENTREQUEST_0_CUSTOM=sssss PAYMENTREQUEST_0_INVNUM=sssssss PAYMENTREQUEST_0_CURRENCYCODE=USD PAYMENTREQUEST_0_SHIPPINGAMT=0.00 PAYMENTREQUEST_0_ITEMAMT=104.52 PAYMENTREQUEST_0_AMT=104.52 PWD=密码 USER=paypal账户 SIGNATURE=签名"返回示例:
{"TOKEN": "EC-22222222222222","SUCCESSPAGEREDIRECTREQUESTED": "false","TIMESTAMP": "2020-07-24T03:29:18Z","CORRELATIONID": "22222","ACK": "Success","VERSION": "65.1","BUILD": "22222","INSURANCEOPTIONSELECTED": "false","SHIPPINGOPTIONISDEFAULT": "false","PAYMENTINFO_0_TRANSACTIONID": "Paypal交易号","PAYMENTINFO_0_TRANSACTIONTYPE": "expresscheckout","PAYMENTINFO_0_PAYMENTTYPE": "instant","PAYMENTINFO_0_ORDERTIME": "2020-07-24T03:29:17Z","PAYMENTINFO_0_AMT": "104.52","PAYMENTINFO_0_FEEAMT": "2.81","PAYMENTINFO_0_TAXAMT": "0.00","PAYMENTINFO_0_CURRENCYCODE": "USD","PAYMENTINFO_0_PAYMENTSTATUS": "Completed","PAYMENTINFO_0_PENDINGREASON": "None","PAYMENTINFO_0_REASONCODE": "None","PAYMENTINFO_0_PROTECTIONELIGIBILITY": "Eligible","PAYMENTINFO_0_PROTECTIONELIGIBILITYTYPE": "ItemNotReceivedEligible,UnauthorizedPaymentEligible","PAYMENTINFO_0_SELLERPAYPALACCOUNTID": "paypal账户","PAYMENTINFO_0_ERRORCODE": "0","PAYMENTINFO_0_ACK": "Success"
}

第三步也就是常规的同步回调,商户根据支付平台返回的支付信息、支付状态,来更新网站的订单状态,进行发货等后续操作。

来敲敲黑板总结一下:

第一步:SetExpressCheckout
发起支付请求,也就是蹲下来预备起飞,恰似火箭发射按下了启动按钮。成之为S操作。

第二步:GetExpressCheckoutDetails
火箭发射出去几分钟后,航天员被抛送到外太空,我们得发起一个命令,看下咋样了,看看现状是啥。
称之为G操作。

第三步:DoExpressCheckout付款
一切貌似还不错,那就发起命令让航天员执行外太空作业吧:出仓采集点啥东西,算是这次火箭发射的目标任务要执行一下蛤。称之为D操作。

问题来了:Paypal快捷支付,为什么会有第二步,G操作???

我们在对接其他支付平台时,基本都是发起支付请求(第一步),然后用户支付后(平台自动资金划转)同步回调或异步支付状态给商户即可。(第二三步不用对接)。为什么Paypal口口声声说快捷,但是在技术集成环境还要商户自己获取交易(第二步)自己进行划钱请求(第三步)。

原因:

Paypal将买家带回商家网站,以在确认页面上查看费用和交易详细信息。商户可以进行GetExpressCheckoutDetailsAPI调用以获取显示在此确认页面上的详细信息。

这样说是为了让用户再次确定下,这个网站即将要在自己的Paypal账户里扣除多少钱。让用户看到!!
这样杜绝了一种网站欺诈情况:在发起支付请求的时候(S操作),网站给用户显示的是10美金,但是网站自己在接口里可能加了0.5美金,这样用户支付支付10.5美金。
这样的话,用户可能毫不知情,或者生气了(可能投诉)。支付平台作为三方的“信用”工具,也有点懵逼。
所以Paypal干脆拆分步骤,“多次握手”,提高支付安全性,和数据准确性。

总之,Paypal作为支付龙头,要做的应该是稳定、可靠、安全、精准。至于牺牲点集成步骤,何足挂齿吧。

  相关解决方案