借用百度百科一句话介绍它吧:
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
用户这个时候:进入PayPal付款页面后,用户将执行以下操作:
登录到贝宝。
选择运输和资金来源。
继续交易并返回您的站点。
返回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=username
VENDOR=vendor
PARTNER=PayPal
PWD=password
TRXTYPE=S
TENDER=P
ACTION=G
TOKEN=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作为支付龙头,要做的应该是稳定、可靠、安全、精准。至于牺牲点集成步骤,何足挂齿吧。