https://domain.com/pay/)。prepay_id。paySign 等參數傳給前端。WeixinJSBridge.invoke('getBrandWCPayRequest', ...)。框架路由通常無實體目錄,微信驗證會失敗。解決方案:在 Web 根目錄建立實體子資料夾(如 public/pay/),並放入一個入口檔案(index.php)負責載入框架、處理支付頁邏輯。Nginx/Apache 配置讓該路徑優先匹配實體目錄。
微信內建瀏覽器需等待 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>
appId、timeStamp(秒級時間戳)、nonceStr、package=prepay_id=xxx、簽名算法(MD5/HMAC-SHA256)是否一致。