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

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

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

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

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

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

Paypal快捷支付分三步走:
Paypal Express Checkout快速结账API心得--Star.Hou_第1张图片

第一步: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=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作为支付龙头,要做的应该是稳定、可靠、安全、精准。至于牺牲点集成步骤,何足挂齿吧。

你可能感兴趣的:(Paypal)