Я занимаюсь разработкой китайского сайта электронной коммерции на PHP.
И я завершил генерацию QR-кода Weixin Pay URL. И это работает правильно на ПК.
Теперь в случае версии для планшета или мобильного сайта, как я могу открыть приложение wechat с веб-страницы и отправить данные QR-кода в приложение wechat.
Каждый раз, когда вы генерируете 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
Это главная болевая точка с WeChat. Если пользователь уже находится в браузере WeChat, вы можете попросить его нажать и удерживать QR-код, и у него появится всплывающее окно с возможностью отсканировать QR-код на изображении.
Если они находятся в другом мобильном браузере, вы в значительной степени застряли, сказав им сделать снимок экрана, а затем отсканировать изображение из WeChat.
В Wechat Pay есть 4 вида торговли:
Итак, я думаю, что MWEB — это то, что вам нужно и лучше всего подходит для вашего сценария.