91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP怎么接入微信支付分

發布時間:2021-09-16 14:07:39 來源:億速云 閱讀:156 作者:小新 欄目:編程語言

這篇文章主要介紹了PHP怎么接入微信支付分,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

一、微信支付分介紹及開通

  1. 產品介紹:https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter3_1_0.shtml

  2. 接入前準備:https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter3_1_1.shtml

  3. 測試號配置:https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter3_1_5.shtml

二、免確認模式開發

參考網址:https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter3_1_3.shtml

  • 步驟1 用戶在商戶側下單購買產品或服務,此時,我們需要先對用戶的授權狀態進行查詢

  • 步驟2 引導用戶開啟授權服務

  • 步驟3 創建支付分訂單

  • 步驟4 商戶為用戶提供服務,待服務結束后,商戶調用完結訂單接口完結當前訂單。

  • 步驟5 收到用戶扣款成功通知,業務流程結束

三、SDK相關

  1. 官方文檔:https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay6_0.shtml

  2. wechatpay-php(推薦):https://github.com/wechatpay-apiv3/wechatpay-php

四、代碼示例

/**
     * Notes: 步驟1 用戶在商戶側下單購買產品或服務,此時,我們需要先對用戶的授權狀態進行查詢
     * User: XXX
     * DateTime: 2021/7/27 9:59
     */
    public function getAuthStatus(string $cid)
    {
        $openid = $this->getOpenid($cid);
        if (!$openid) {
            return false;
        }
        try {
            $resp = $this->instance->v3->payscore->permissions->openid->{'{openid}'}
                ->get(
                    [
                        'query'  => [
                            'appid'      => $this->appid,
                            'service_id' => $this->serviceId,
                        ],
                        // uri_template 字面量參數
                        'openid' => $openid,
                    ]
                );
            $res = json_decode($resp->getBody()->getContents(), true);
            if ($res['authorization_state'] == 'AVAILABLE') {
                return true;
            } else {
                return false;
            }
        } catch (\Exception $e) {
            return false;
            /*echo($e->getResponse()->getStatusCode());
            // 進行錯誤處理
            echo $e->getMessage()->getReasonPhrase(), PHP_EOL;
            if ($e instanceof \Psr\Http\Message\ResponseInterface && $e->hasResponse()) {
                echo $e->getResponse()->getStatusCode() . ' ' . $e->getResponse()->getReasonPhrase(), PHP_EOL;
                echo $e->getResponse()->getBody();
            }*/
        }
    }
/**
     * Notes:步驟2 引導用戶開啟授權服務-獲取預授權碼
     * User: XXX
     * DateTime: 2021/7/27 18:37
     */
    public function openAuthStatus()
    {
        try {
            $resp = $this->instance->v3->payscore->permissions->post(
                [
                    'json' => [
                        'service_id'         => $this->serviceId,
                        'appid'              => $this->appid,
                        'authorization_code' => $this->getRandStr(12), // 授權協議號,類似訂單號
                        //'notify_url'         => 'https://weixin.qq.com/',
                    ]
                ]
            );
            $res = json_decode($resp->getBody(), true);
            return $res['apply_permissions_token'];
        } catch (\Exception $e) {
            // 進行錯誤處理
            /*if ($e->hasResponse()) {
                echo $e->getResponse()->getBody();
            }*/
            return false;
        }
    }
/**
     * Notes: 步驟3 創建支付分訂單
     * User: xxx
     * DateTime: 2021/7/27 19:21
     * @param string $cid     用戶ID
     * @param string $orderSn 訂單號
     */
    public function makeOrder(string $cid, string $orderSn)
    {
        // 訂單信息
        ....
        $openid = $this->getOpenid($cid);
        if (!$openid) {
            return [
                'code' => -1,
                'msg'  => 'openid不可以為空',
            ];
        }

        // 異步通知地址,有時候發現莫名的變成了localhost,這里先固定
        $notiryUrl = route('api.v1.wxpayPointsNotify');

        $json = [
            'out_order_no'         => $orderSn,                                                        // 商戶服務訂單號
            'appid'                => $this->appid,                                                    // 應用ID
            'service_id'           => $this->serviceId,                                                // 服務ID
            'service_introduction' => '換電費用',                                                          // 服務信息,用于介紹本訂單所提供的服務 ,當參數長度超過20個字符時,報錯處理
            'time_range'           => [
                'start_time' => $startTime, //'20210729160710',
            ],
            'risk_fund'            => [
                'name'   => 'ESTIMATE_ORDER_COST',         // 風險金名稱
                'amount' => 300,                           // 風險金額 數字,必須>0(單位分)
            ],
            'attach'               => $orderSn,// 商戶數據包
            'notify_url'           => $notiryUrl,
            'openid'               => $openid,// 用戶標識
            'need_user_confirm'    => false,// 是否需要用戶確認
        ];

        try {
            $resp = $this->instance->v3->payscore->serviceorder->post(
                [
                    'json' => $json
                ]
            );
            $res = json_decode($resp->getBody(), true);

            // 入庫支付分訂單
            ...
            return [
                'code' => 0,
                'msg'  => '支付分訂單創建完成',
            ];
        } catch (\Exception $e) {
            // 進行錯誤處理
            if ($e->hasResponse()) {
                $body = $e->getResponse()->getBody();
                if ($body) {
                    return [
                        'code' => -1,
                        'msg'  => (string)$body,
                    ];
                }
            }
            return '';
        }
    }

完結支付分訂單、取消支付分訂單、查詢支付分訂單 類似,這里不再寫出來。

/**
     * Notes: 異步通知
     * User: XXX
     * DateTime: 2021/8/3 14:20
     */
    public function notify()
    {
        // 獲取返回的信息
        $responseBody = file_get_contents("php://input");
        $responseArr = json_decode($responseBody, true);
        if ($responseArr) {
            $res = AesGcm::decrypt($responseArr['resource']['ciphertext'], 'xxxapi密鑰', $responseArr['resource']['nonce'], $responseArr['resource']['associated_data']);
            $resArr = json_decode($res, true);
            if ($resArr) {
                // 記錄日志
                ...
                // 業務邏輯處理
                ...
                // 訂單日志記錄
               ...
            } else {
                return [
                    'code' => -1,
                    'msg'  => '解析有誤',
                ];
            }
        } else {
            return [
                'code' => -1,
                'msg'  => 'nothing post',
            ];
        }
    }

五、注意事項

  1. 嚴格遵循文檔中的參數要求,出現問題第一時間比較傳入參數和官方示例的區別

  2. 支付分訂單必須取消,或完結

感謝你能夠認真閱讀完這篇文章,希望小編分享的“PHP怎么接入微信支付分”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

建平县| 子长县| 若尔盖县| 浦东新区| 金秀| 交口县| 宁都县| 林州市| 云和县| 元江| 乐昌市| 满洲里市| 聂荣县| 上栗县| 彩票| 施秉县| 泗阳县| 习水县| 且末县| 石城县| 天门市| 甘洛县| 荔波县| 石河子市| 临西县| 双城市| 桦甸市| 庆元县| 泰顺县| 阿拉善左旗| 仙居县| 侯马市| 皋兰县| 万全县| 当雄县| 平潭县| 吉木乃县| 仪陇县| 临沭县| 卢龙县| 彭州市|