日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

tp5(fastadmin)对接苹果支付

發(fā)布時間:2023/12/15 综合教程 41 生活家
生活随笔 收集整理的這篇文章主要介紹了 tp5(fastadmin)对接苹果支付 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

蘋果支付的流程:

  1、前端在調(diào)起蘋果支付前,先請求到服務(wù)端,服務(wù)端先生成一條充值記錄,但是狀態(tài)為:未支付;然后把這個訂單id發(fā)給前端。

  2、前端在支付完成的時候,會收到蘋果的支付憑證,將此憑證和訂單id回傳給服務(wù)端。訂單id的作用是用來確定是哪一筆。支付憑證是拿來校驗是否支付成功。檢驗成功后,自己的業(yè)務(wù)邏輯(將該條訂單的狀態(tài)改為已支付,然后加余額或延長會員時間)

  在這我也說一下我前端遇到的一個問題,方便有遇到的,可以參考。

  直接編譯到蘋果手機上,會一直發(fā)起失敗。我們這邊的解決方法是,打包出來,然后發(fā)到蘋果的【TestFlight】上,然后就可以正常發(fā)起了。

  而且這時候發(fā)起的支付,可以無限支付,因為是沙盒環(huán)境,不會扣費

后端在蘋果支付的過程中,只需要做兩步操作:

第一步:生成一條充值記錄,但是狀態(tài)為:未支付

第二部:接收到前端的支付憑證后,校驗支付憑證,然后業(yè)務(wù)邏輯

以下是蘋果支付的驗證。(創(chuàng)建訂單的接口,不用特殊處理,只要生成一條未支付的訂單記錄就行(直接insert一條記錄)。這里就不貼代碼了)

<?php

namespace appapicontroller;

use appcommoncontrollerApi;

class Applepay extends Api
{

    protected $noNeedLogin = [];
    protected $noNeedRight = '*';


    protected $orderNum = null;
    protected $model = null;
    protected $relationSearch = true;

    protected $appleCode = [
        21000 => 'App Store無法讀取你提供的JSON數(shù)據(jù)',
        21002 => '收據(jù)數(shù)據(jù)不符合格式',
        21003 => '收據(jù)無法被驗證',
        21004 => '你提供的共享密鑰和賬戶的共享密鑰不一致',
        21005 => '收據(jù)服務(wù)器當前不可用',
        21006 => '收據(jù)是有效的,但訂閱服務(wù)已經(jīng)過期。當收到這個信息時,解碼后的收據(jù)信息也包含在返回內(nèi)容中',
        21007 => '收據(jù)信息是測試用(sandbox),但卻被發(fā)送到產(chǎn)品環(huán)境中驗證',
        21008 => '收據(jù)信息是產(chǎn)品環(huán)境中使用,但卻被發(fā)送到測試環(huán)境中驗證'
    ];

    public function _initialize()
    {
        parent::_initialize();
        $this->model = model('app\common\model\activity\Order');
    }


    /**
     * @title 驗證支付票據(jù) 完成訂單接口
     */
    public function verifyReceipt()
    {
        $receipt = $this->request->param('receipt/s', '');
        if (empty($receipt)) {
            $this->error('訂單錯誤');
        }
        
        $this->orderNum = $this->request->param('order_id/s', '');
        $order = $this->model->where(array('order_id' => $this->orderNum))->find();
        if (empty($order)) {
            $this->error('訂單錯誤');
        }
        if ($order['state'] == 1) {
            $this->error('訂單已成功支付,請確認');
        }
        
        
        $time = time();
        file_put_contents("notifyLog/notifyProcessLog".date("Ymd", $time).".log", "
" . date("Y-m-d H:i:s", $time) . ",支付憑證:" . $receipt, FILE_APPEND);

        $jsonItem = json_encode(['receipt-data' => $receipt]);

        $url = 'https://buy.itunes.apple.com/verifyReceipt';      //正式

        //模擬post提交(下面會貼出來),將前端獲取到的憑證,去和蘋果換取詳細的支付信息
        $result = $this->http_post_json($jsonItem, $url);

        if ($result['status'] == '21007') {
            //驗證失敗 返回app錯誤狀態(tài)
            $url = 'https://sandbox.itunes.apple.com/verifyReceipt';  //測試
            $result = $this->http_post_json($jsonItem, $url);
        }
        file_put_contents("notifyLog/notifyProcessLog".date("Ymd", $time).".log", "
" . date("Y-m-d H:i:s", $time) . ",order:" . var_export($result, true), FILE_APPEND);

    //如果檢測到 等于 0 就是支付成功,其他的錯誤碼去獲取對應(yīng)錯誤信息 if ($result['status'] !== 0) { //驗證失敗 返回app錯誤狀態(tài) $this->error($this->appleCode[$result['status']]); }

    //接下來就是做自己的業(yè)務(wù)邏輯
    
     $this->success('充值成功'); } //模擬post提交 public function http_post_json($json, $url) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $json); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); //這兩行一定要加,不加會報SSL 錯誤 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); $response = curl_exec($ch); $errno = curl_errno($ch); $errmsg = curl_error($ch); curl_close($ch); $data = json_decode($response, true); return $data; }

}

  自己親測可用。驗證的步驟做的不夠詳細,可以自己根據(jù)邏輯詳細做驗證。

  因為我只需要知道是否支付成功就行,所以我這只驗證了前端傳過來的支付成功的憑證是否正確且已正常支付,然后根據(jù)訂單id定位哪條記錄,就可以找到用戶和金額。

  (可根據(jù)自己的情況,加 product_id(蘋果虛擬產(chǎn)品的id)的驗證或其他的一些驗證,此不再贅述)

!!!是的,你不用懷疑,就是這么簡單~~~

總結(jié)

以上是生活随笔為你收集整理的tp5(fastadmin)对接苹果支付的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。