蘋果內購流程:
iOS App上次蘋果商店審核對於虛擬金幣類必須要用蘋果支付,不能使用第三方支付,蘋果支付還要3/7分成,呵呵...
1、前六步有IOS端處理,最終獲取購買憑證
2、POST請求,發送購買憑證receipt-data到服務端接口
/** * 蘋果內購 * @param receipt-data 購買憑證(必傳) * @param is_test 是否沙盒數據(選填,1是 0否,默認否) * @return json **/ public function actionsApple_pay(){ if (!framework::post('is_test')) { //沙盒購買地址 $url = "https://sandbox.itunes.apple.com/verifyReceipt"; }else{ //正式購買地址 $url = "https://buy.itunes.apple.com/verifyReceipt"; } $receipt_data = framework::post('receipt-data'); // 驗證參數 if (strlen($receipt_data) < 20){ $result = array( 'status'=>false, 'message'=>'非法參數' ); echo json_encode($result); return false; } $post_data = json_encode(array("receipt-data" => $receipt_data)); $response = https::curlHttps($url, $post_data); $res = json_decode($response, true); $err_msg = array( '21000' => 'App Store不能讀取你提供的JSON對象', '21002' => 'receipt-data域的數據有問題', '21003' => 'receipt無法通過驗證', '21004' => '提供的shared secret不匹配你賬號中的shared secret', '21005' => 'receipt服務器當前不可用', '21006' => 'receipt合法,但是訂閱已過期。服務器接收到這個狀態碼時,receipt數據仍然會解碼並一起發送', '21007' => 'receipt是Sandbox receipt,但卻發送至生產系統的驗證服務', '21008' => 'receipt是生產receipt,但卻發送至Sandbox環境的驗證服務' ); // 判斷是否購買成功 if(intval($res['status']) === 0){ $result = ['status'=>true, 'message'=>'正式購買成功']; }else{ $result = ['status'=>false, 'message' => '購買失敗 status:'.$res['status'].' - '.@$err_msg[$res['status']] ]; framework::logWrite('蘋果支付失敗 ---res---'.json_encode($result)); } echo json_encode($result); return false; }
注:測試階段返回 21007,默認為沙盒數據,傳is_test參數即可查看響應結果