首先,明白一点:
支付宝使用的支付规则没有任何条件限制,苹果支付则不然,需要遵循苹果后台的支付规则限制。如下图列举部分金额规则:
后面的收入是随着汇率随时改变的。
那么, 我们在做这两种支付集成时,可以让支付宝的支付规则遵循苹果支付的,这样两种支付方式可兼容,因为苹果支付在支付完成时苹果公司就会抽成30%,那么,为了保证app运营平台不受利益损失,可以设置支付价格一样,给用户返还的钻石数不一样,苹果支付可以多赠送用户一些。
支付宝的支付流程是:
1:APP请求站点接口,在站点内生成一条充值记录,并保证该记录有唯一的订单编号。
2:APP获取到站点返回的订单编号,拿着订单编号调起支付宝sdk,完成支付。
3:支付宝支付成功后,支付宝会按照生成订单编号时的回调地址,把支付成功后的支付信息回调到站点回调地址上
4:站点回调地址拿到支付宝返回的支付信息后,会使用返回的信息调用支付宝签名算法进行签名验证,验证通过之后,修改站点数据库的订单信息,给用户增加钻石,并返回支付宝后台success告知支付宝整个支付流程完成,如果返回fail的话,支付宝后台会定时向回调地址发送支付结果,直到收到success的反馈信息为止,具体的可以参考支付宝app支付官方文档。
苹果支付的流程是:
1:APP请求充值规则接口,拿到充值规则里的product_id
2:当APP选择一个充值规则时,会得到该充值规则的product_id,存入全局变量。
同时请求站点接口,在站点内生成一条充值记录,该记录会生成唯一的订单编号orderid并返给APP。
3:APP携带全局的product_id请求苹果支付sdk,苹果支付会把商品信息返回给APP。
4:APP界面展示输入苹果账号密码支付,并携带订单编号orderid和商品信息请求站点回调地址。【注意,这两个步骤是异步进行的,但实际上,支付会快一步】
5:站点回调地址拿到参数后,将参数调用苹果支付的沙盒环境地址【https://sandbox.itunes.apple.com/verifyReceipt】或生产环境地址【https://buy.itunes.apple.com/verifyReceipt】进行参数验证。
注意:具体调沙盒环境还是生产环境,站点后台可以做个开关,或者根据当前app版本号和上架版本号比较。
验证通过之后,更改订单状态,给用户增加钻石,并返回{"status":"success","info":"充值支付成功"}告诉iOS手机支付成功。
6:苹果支付后台同时会通过内部通信告知iOS手机该商品信息支付成功,iOS手机拿到苹果后台的支付信息后,要再次通过通信告知苹果支付该支付流程已经走完,此时,苹果支付后台就不会再通知iOS手机支付信息了,不然的话,苹果支付后台会定时向iOS手机发送商品支付信息通信,来确保该订单支付完成。
7:iOS手机拿到站点回调地址返回success信息之后,要提示用户充值成功,并刷新当前页面,展示用户最新的钻石数。
苹果支付的流程写起来有点绕,想直观的理解可以看下面的图:
这样,大家就明白支付宝支付和苹果支付的区别了吧。