2016-02-20 2 views
1

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

Теперь в случае версии планшета или мобильного веб-сайта, как я могу открыть приложение 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 WebBrowser вам нужно сделать вызов AJAX, чтобы получить его и использовать его в коде, как это:

Execute 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 - отформатированный результат вызова API-интерфейса unifiedorder WechatPay. function(res) вызывается после того, как пользователь вытащит Gateway WechatPay с этими возможными результатами.

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

UPDATE:

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

Другой комментарий, только версия Wechat версии 5.0 и выше поддерживает функцию оплаты, поэтому пользователи с версиями до 5.0 не могут получить доступ к платежу Wechat. Но вы можете проверить версию агента пользователя, он должен сказать что-то вроде этого: 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

+0

Благодарим за лучший ответ. –

+0

Это просто отлично и лучше объясняется, чем их официальная документация. Спасибо чувак. – Laurent

+0

Так что же openid, когда мы создаем unifiedOrder с типом JSAPI? Нужно ли нам разрешать пользователю открывать перед использованием этого метода оплаты (JSAPI)? Есть ли другой способ выполнить JSAPI-метод без необходимости использования openId? –

0

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

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

0

Есть 4 вида торговли WeChat Pay:

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

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