Способ оплаты Weixin в PHP

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

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

3 ответа

Решение

Каждый раз, когда вы генерируете 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 вида торговли:

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

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

Другие вопросы по тегам