关于海外支付SDK的集成方案与总结

前言

因为业务的需要,公司的游戏不断的向海外拓展.自然地,我们的游戏也要根据当地的需要接入不同的支付方式.其中,最具代表性的,首当其冲的非苹果支付和谷歌支付莫属.但是,除此之外也有其他的支付方式,比如PayPal,Mycard等等.

PayPal支付

相对于国外其他的第三方支付,Paypal支付算是一个比较容易上手的第三方支付.Paypal支付移动SDK继承三种方式的支付,如下所示:

  • a) 接受信用卡和Paypal支付: 开发者能够简单地将Paypal支付和信用卡支付集成到应用中,信用卡支付手动支付和扫码支付.
  • b) 未来支付: 一旦客户将Paypal账户授权给开发者的应用中,使用Paypal支付时无需再次登录即可完成付款.
  • c) 原生支付: 用户付款时无需重定向到新页面即可完成付款

Rest API 与 OAuth2协议

Paypal支付提供的api采用的是RESTful(epresentational State Transfer)架构.

OAuth2协议

  • 1)开发者使用key和secret向Paypal服务器请求token(OAuth2协议).
  • 2)之后的请求都需要携带token认证完成操作.
  • 3)用户支付成功之后,服务端需要将利用客户端回传的数据向Paypal发起支付确认.
  • 4)当token过期失效是重新获取Token.

获取授权Token

开发者从开发者后台相应的应用上获取client_id和secret.通过这两个秘钥串想服务器请求token.

1
2
3
4
5
curl -v https://api.sandbox.paypal.com/v1/oauth2/token \
-H "Accept: application/json" \
-H "Accept-Language: en_US" \
-u "client_id:secret" \
-d "grant_type=client_credentials"

请求成功之后,响应的参数格式数如下所示:
其中, Access-Token 表示获取到token值.expires_in表示该token的过期时间.scope表示授权可请求的权限.

1
2
3
4
5
6
7
8
{
"scope": "https://uri.paypal.com/services/subscriptions https://api.paypal.com/v1/payments/.* https://api.paypal.com/v1/vault/credit-card https://uri.paypal.com/services/applications/webhooks openid https://uri.paypal.com/payments/payouts https://api.paypal.com/v1/vault/credit-card/.*",
"nonce": "2017-06-08T18:30:28ZCl54Q_OlDqP6-4D03sDT8wRiHjKrYlb5EH7Di0gRrds",
"Access-Token": "Access-Token",
"token_type": "Bearer",
"app_id": "APP-80W284485P519543T",
"expires_in": 32398
}

支付验证

开发者通过将结合用户支付成功之后从客户端回传的参数(订单号)向Paypal服务器指定的API请求支付验证.此时需要在请求头中携带token.

1
2
3
curl https://api.sandbox.paypal.com/v1/payments/payment/PAY-5YK922393D847794YKER7MUI \
-H "Content-Type: application/json" \
-H "Authorization: Bearer accessToken"

请求成功之后,响应的参数格式如下所示:
其中,environment表示请求的支付环境,分为sandbox(沙盒模式)和正式模式(live).state表示支付状态,approved表示支付验证已通过. 开发者可以通过对响应值携带的相关参数进行二次验证.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"client":{
"environment":"sandbox",
"paypal_sdk_version":"2.0.0",
"platform":"iOS",
"product_name":"PayPal iOS SDK;"
},
"response":{
"create_time":"2014-02-12T22:29:49Z",
"id":"PAY-564191241M8701234KL57LXI",
"intent":"sale",
"state":"approved"
},
"response_type":"payment"
}

Mycard支付

思考

参考资料

文章目录
  1. 1. 前言
  2. 2. PayPal支付
    1. 2.1. Rest API 与 OAuth2协议
      1. 2.1.1. OAuth2协议
      2. 2.1.2. 获取授权Token
      3. 2.1.3. 支付验证
  3. 3. Mycard支付
  4. 4. 思考
  5. 5. 参考资料