首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 串接微信支付(JSAPI)關鍵步驟與常見坑點整理

     編輯:PHP 綜合知識

流程概覽

  1. 商戶後台配置:設定支付授權目錄(需到二/三級目錄,如 https://domain.com/pay/)。
  2. 統一下單:Server 端呼叫微信 API 獲取 prepay_id。
  3. 簽名再加密:依規範產生 paySign 等參數傳給前端。
  4. 前端喚起:使用 WeixinJSBridge.invoke('getBrandWCPayRequest', ...)。

MVC 框架下的授權目錄問題

框架路由通常無實體目錄,微信驗證會失敗。解決方案:在 Web 根目錄建立實體子資料夾(如 public/pay/),並放入一個入口檔案(index.php)負責載入框架、處理支付頁邏輯。Nginx/Apache 配置讓該路徑優先匹配實體目錄。

前端喚起支付的關鍵:WeixinJSBridgeReady

微信內建瀏覽器需等待 WeixinJSBridgeReady 事件後才能呼叫 JSAPI。標準寫法:

<script>
document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {
    WeixinJSBridge.invoke('getBrandWCPayRequest', {
        'appId'     : '<?php echo $wOpt[\"appId\"]; ?>',
        'timeStamp' : '<?php echo $wOpt[\"timeStamp\"]; ?>',
        'nonceStr'  : '<?php echo $wOpt[\"nonceStr\"]; ?>',
        'package'   : '<?php echo $wOpt[\"package\"]; ?>',
        'signType'  : '<?php echo $wOpt[\"signType\"]; ?>',
        'paySign'   : '<?php echo $wOpt[\"paySign\"]; ?>'
    }, function(res) {
        if (res.err_msg === 'get_brand_wcpay_request:ok') {
            // 支付成功,導向訂單頁或顯示提示
        } else {
            alert('支付失敗: ' + res.err_msg);
            history.back();
        }
    });
}, false);
</script>

常見問題排查

  • config:invalid_url:授權目錄未設定或路徑層級不足(需至少二級)。
  • 支付參數錯誤:檢查 appId、timeStamp(秒級時間戳)、nonceStr、package=prepay_id=xxx、簽名算法(MD5/HMAC-SHA256)是否一致。
  • 測試環境無法發起:微信支付需通過測試案例(下單、發貨通知等)才能申請正式上線。

參考資源

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved