PHP微信內H5的支付方案-JSAPI

1、背景

有個商城項目,是微信內H5的商城須要使用微信支付php

2、方案調研

通過了解,微信支付支持h5支付+jsapi的方式支持,可是h5支付[參考備註1⃣️]的方案是隻支持微信外的h5,沒辦法對微信內打開的h5頁面進行操做的,因而咱們最終仍是採用的jsapi的方式去進行微信內H5支付的方案。api

3、JSAPI支付簡介[參考備註2⃣️]

image.png

過程瀏覽器

商戶系統和微信支付系統主要交互:微信

一、商戶server調用統一下單接口請求訂單,api參見公共api【統一下單APIapp

二、商戶server接收支付通知,api參見公共api【支付結果通知APIcomposer

三、商戶server查詢支付結果,api參見公共api【查詢訂單API工具

4、微信支付向微信下單和消息通知

微信支付jsapi這塊,我沒有使用官方demo和文檔去本身實現一套,直接找了overtrue大大的 easywechat的composer包去進行,由於都封裝好了,簡單的說,就是分三步微信支付

一、獲取到openidurl

二、向微信下單 參考代碼連接spa

三、獲取微信回掉信息/手動查詢微信下單的訂單狀態支付回調信息

部分參考代碼以下

//向微信下單部分參考代碼
use EasyWeChat\Factory;

$config = [
    // 必要配置
    'app_id'             => 'xxxx',
    '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'         => '默認的訂單回調地址',     // 你也能夠在下單時單獨設置來想覆蓋它
];

$app = Factory::payment($config);
$result = $app->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',
]);

===============================================================
// 回調通知
$app = Factory::payment($config);
$response = $app->handlePaidNotify(function ($message, $fail) {
    // 你的邏輯
    return true;
    // 或者錯誤消息
    $fail('Order not exists.');
});

$response->send(); // Laravel 裏請使用:return $response;

5、參考資料/備註/坑

參考資料1⃣️:

微信支付接口簽名校驗工具

https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=20_1

參考資料2⃣️:

官方SDK與DEMO下載

https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1

備註1⃣️:

微信外H5支付的方案:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_4

H5支付是指商戶在微信客戶端外的移動端網頁展現商品或服務,用戶在前述頁面確認使用微信支付時,商戶發起本服務呼起微信客戶端進行支付。主要用於觸屏版的手機瀏覽器請求微信支付的場景,能夠方便的從外部瀏覽器喚起微信支付

備註2⃣️:

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_4

坑1⃣️: 當使用微信支付簽名校驗 工具把xml校驗經過了,而且配置對了APPID、MCHID、KEY、APPSECRET的,絕大多數的「簽名錯誤」均可以解決了,要是還不行,重置了KEY (商戶支付密鑰),就算重置後的,和以前的KEY如出一轍,但居然就能夠了.

相關文章
相關標籤/搜索