公司做的app需要做IAP订阅支付,自己做完总结一下,希望对小伙伴们有帮助我就很欣慰了。代码写的不好 不要喷我。
首先讲一下我的业务逻辑:
先上图
下面详细讲一下,作为服务端具体要做些什么,并贴上对应的代码:
第一步:通过客户端传过来的recept(票据)进行生成订单的操作【注意这里需要验证订单是否已存在】,订单生成返回客户端相关信息;
public function pay()
{
$uid = $this->request->header('uid');
$receipt_data = $this->request->post('receipt');
if (!$uid || !$receipt_data) return $this->rep(400);
$info = $this->getReceiptData($receipt_data, $this->isSandbox);//去苹果进行验证,防止收到的是伪造的数据
Log::info(['uid'=>$uid,'receipt'=>$receipt_data,'iap_info'=>$info]);
if (is_array($info) && $info['status'] == 0) {
//没有错误就进行生成订单的业务逻辑的处理
} elseif (is_array($info) && $info['status'] == 21007) {
$new_info = $this->getReceiptData($receipt_data, true);//接着去苹果官网进行二次验证(沙盒)
// 进行生成订单的业务逻辑的处理
}
}
private function getReceiptData($receipt, $isSandbox = false)
{
if ($isSandbox) {
$endpoint = 'https://sandbox.itunes.apple.com/verifyReceipt';//沙箱地址
} else {
$endpoint = 'https://buy.itunes.apple.com/verifyReceipt';//真实运营地址
}
$postData = json_encode