weixinjsbridge — метод оплаты Weixin в переполнении стека

Я занимаюсь разработкой китайского сайта электронной коммерции на PHP.
И я завершил генерацию QR-кода Weixin Pay URL. И это работает правильно на ПК.

Теперь в случае версии для планшета или мобильного сайта, как я могу открыть приложение wechat с веб-страницы и отправить данные QR-кода в приложение wechat.

1

Решение

Каждый раз, когда вы генерируете URL, который вы помещаете в QRCode, вы создаете заказ Wechat, вызывающий unifiedorder URL предоставлен WechatPay, верно? С помощью trade_type = NATIVE,

Вам нужно сделать тот же звонок на этот URL, но с trade_type = JSAPI, также добавив параметр openid = wechatUserOpenId,

Затем, используя возвращенные данные $orderResult вам нужно сгенерировать строку в формате json со следующими данными, как в этом коде:

    $timeStamp = time();
$jsOrder['appid']     = $orderResult['appid'];
$jsOrder['timeStamp'] = "$timeStamp";
$jsOrder['nonce_str'] = $this->randomGenerator->getRandomString(32);
$jsOrder['package']   = "prepay_id=" . $orderResult['prepay_id'];
$jsOrder['signType']  = "MD5";
$jsOrder['paySign']   = $this->makeSignature($jsOrder);

$parameters = json_encode($jsOrder);

Когда у вас есть эта строка, внутри страницы, которую вы показываете в веб-браузере Wechat, вам нужно сделать ajax-вызов, чтобы получить ее и использовать в коде, подобном следующему:

казнить callpay() в событии onClick:

function callpay()
{
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', jsApiCall);
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
}
}else{
jsApiCall();
}
}function jsApiCall()
{
var parameters = result[2];//fill it with the previous $parameters, with your preferred ajax call
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
parameters,
function(res){
console.log(res);
switch(res.err_msg)
{
case "ok":
console.log('payment made');
paymentWasMade = true;
break;
case "cancel":
break;
case "fail":
break;
}
});
}

parameters это форматированный результат unifiedorder Вызов API WechatPay.
function(res) вызывается после того, как пользователь выходит из шлюза WechatPay с этими возможными результатами.

Я надеюсь, что это полезно для вас.

ОБНОВИТЬ:

Я понял, что вам не нужен файл jweixin-1.0.0.js, веб-браузер Wechat распознает вызов JS.

Еще один комментарий, только Wechat версии 5.0 и выше поддерживает функцию оплаты, поэтому пользователи с версиями до 5.0 не могут получить доступ к Wechat Payment. Но вы можете проверить версию в пользовательском агенте, она должна сказать что-то вроде этого: Mozilla/5.0(iphone;CPU iphone OS 5_1_1 like Mac OS X) AppleWebKit/534.46(KHTML,like Gecko) Mobile/9B206 MicroMessenger/5.0

4

Другие решения

Это главная болевая точка с WeChat. Если пользователь уже находится в браузере WeChat, вы можете попросить его нажать и удерживать QR-код, и у него появится всплывающее окно с возможностью отсканировать QR-код на изображении.

Если они находятся в другом мобильном браузере, вы в значительной степени застряли, сказав им сделать снимок экрана, а затем отсканировать изображение из WeChat.

0

В Wechat Pay есть 4 вида торговли:

  1. JSAPI — используется в встроенном браузере Wechat
  2. NATIVE — создайте QR-код, пользователь должен сканировать QR с помощью встроенного браузера Wechat.
  3. MWEB — ПРИМЕЧАНИЕ. Используется в браузере системы для мобильных устройств или планшетов, однако для завершения процесса оплаты будет запущено приложение Wechat.
  4. APP — используется в приложении, а не в вашем случае

Итак, я думаю, что MWEB — это то, что вам нужно и лучше всего подходит для вашего сценария.

0
По вопросам рекламы [email protected]