EsayWechat+微信小程序支付開發的流程總結

naixiaoxin/think-wechat

基於EsayWechat開發的用於thinkphp框架的拓展包《EsayWechat微信支付文檔》php

一、開始配置git

use Naixiaoxin\ThinkWechat\Facade;

$config = [
    // 必要配置
    'app_id'             => 'xxxx',//公衆號AppID或小程序AppID,看支付場景
    'mch_id'             => 'your-mch-id',//商戶號
    'key'                => 'key-for-signature',   // API 密鑰

    // 如需使用敏感接口(如退款、發送紅包等)須要配置 API 證書路徑(登陸商戶平臺下載 API 證書)
    'cert_path'          => 'path/to/your/cert.pem', // XXX: 絕對路徑!!!!
    'key_path'           => 'path/to/your/key',      // XXX: 絕對路徑!!!!

    'notify_url'         => '默認的訂單回調地址',     // 你也能夠在下單時單獨設置來想覆蓋它
];

$payment= Factory::payment($config);

上面的配置信息,在安裝完成擴展包以後會,可在Config/wechat.php配置文件中配置github

2.統一下單(文檔連接)thinkphp

參數 appidmch_idnonce_strsignsign_type 可不用傳入小程序

$result = $payment->order->unify([
    'body' => '騰訊充值中心-QQ會員充值',
    'out_trade_no' => '20150806125346',
    'total_fee' => 88,
    'spbill_create_ip' => '123.12.12.123', // 可選,如不傳該參數,SDK 將會自動獲取相應 IP 地址
    'notify_url' => 'https://pay.weixin.qq.com/wxpay/pay.action', // 支付結果通知網址,若是不設置則會使用配置裏的默認地址
    'trade_type' => 'JSAPI', // 請對應換成你的支付方式對應的值類型
    'openid' => 'oUpF8uMuAJO_M2pxb1Q9zNjWeS6o',
]);

3.生成小程序調取支付須要的參數數組

JSSDK 模塊用於生成調起微信支付以及共享收貨地址的調用所需的配置參數(文檔連接)php框架

$jssdk = $payment->jssdk;

$config = $jssdk->bridgeConfig($prepayId, false); // 返回數組

4.處理支付回調通知(文檔連接)服務器

$response = $payment->handlePaidNotify(function ( $result , $fail ) {
            Log::write($result);//微信回調通知返回數據在$result
            //支付成功
            if ($result['result_code'] === 'SUCCESS') {
                $orderNO = $result['out_trade_no'];
                Db::startTrans();
                try {
                    $order = OrderModel::where('order_no' , '=' , $orderNO)->find();
                    //訂單狀態是未支付的才處理
                    if ($order['status'] == 1) {
                        $stockStatus = ( new OrderService() )->chenkOrderStock($order->id);
                        if ($stockStatus['pass']) {
                            $this->updateOrderStatus($order->id , true);
                            $this->reduceStock($stockStatus);
                        } else {
                            $this->updateOrderStatus($order->id , false);
                        }
                    }
                    Db::commit();
                    return true;
                } catch ( Exception $e ) {
                    Db::rollback();
                    Log::write($e);
                    return $fail('服務器處理失敗,請稍後再通知我');//服務器處理出現異常須要返回給微信false,讓他再次發起通知
                }
            //支付失敗
            } else if ($result['result_code'] === 'FAIL') {
                //支付失敗也須要返回true,表示服務器已處理,否則微信會反覆通知,沒有意義
                return true;
            }
        });

        $response->send();

注意:1.微信支付回調notify_url地址必須是真實服務器而且經過備案域名;經過ngrok能夠本地開發調試統一下單、微信支付,小程序端能收到微信支付成功通知,可是服務器端,微信沒有回調通知地址,致使沒法處理後續流程,目前不肯定是否微信限制,項目在真實服務器,支付回調正常;微信

相關文章
相關標籤/搜索