Home  >  Article  >  WeChat Applet  >  WeChat scan code payment mode

WeChat scan code payment mode

PHPz
PHPzOriginal
2017-04-04 11:30:116795browse

WeChat scan code payment (Mode 1)


Problems encountered by WeChat scan code payment

  • Native payment URL parameter error

  • CallbackInterfaceThe URL has a callback, but the parameters cannot be received

  • Merchant backend The returned data field structure is illegal

  • Timed out to obtain merchant order information or the httpcode returned by the merchant was not 200

Solution to the problem

  • Native payment URL parameter error
    This error generally occurs when the QR code is generated and scanned on WeChat after obtaining the QR code URL. If you encounter this type of problem, please check

1. Whether there are errors in the parameters in the parameter list required to generate the QR code (case sensitive)
2. Sign in the parameters Correct signature algorithm at the time Signature verification tool


The following is the code to generate the QR code URL

/**
 * 
 * @author Javen
 * 2016年5月14日
 * 扫码支付获取二维码URL(模式一)
 */
public String getCodeUrl(){
    String url="weixin://wxpay/bizpayurl?sign=XXXXX&appid=XXXXX&mch_id=XXXXX&product_id=XXXXX&time_stamp=XXXXX&nonce_str=XXXXX";
    String product_id="001";
    String timeStamp=Long.toString(System.currentTimeMillis() / 1000);
    String nonceStr=Long.toString(System.currentTimeMillis());
    Map<String, String> packageParams = new HashMap<String, String>();
    packageParams.put("appid", appid);
    packageParams.put("mch_id", partner);
    packageParams.put("product_id",product_id);
    packageParams.put("time_stamp", timeStamp);
    packageParams.put("nonce_str", nonceStr);
    String packageSign = PaymentKit.createSign(packageParams, paternerKey);
    return StringUtils.replace(url, "XXXXX", packageSign,appid,partner,product_id,timeStamp,nonceStr);
}
  • The callback interface URL has a callback , but the parameters cannot be received

    Enumeration en=getParaNames();

      while (en.hasMoreElements()) {
          Object o= en.nextElement();
          System.out.println(o.toString()+"="+getPara(o.toString()));
      }

The parameters output in the above code are all NULL

Since the official document description is not very clear, everyone thinks that the callback request will take the productid and user's openid and other parameters as ordinary parameters. In fact, the parameter returned by this callback is an XMLInput stream

HttpServletRequest request = getRequest();
         /**
         * 获取用户扫描二维码后,微信返回的信息
         */
        InputStream inStream = request.getInputStream();
        ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = inStream.read(buffer)) != -1) {
            outSteam.write(buffer, 0, len);
        }
        outSteam.close();
        inStream.close();
        String result  = new String(outSteam.toByteArray(),"utf-8");

resultThe result is



< ;return_msg>

< ;![CDATA[1322117501]]>



<![CDATA[wx2016051 51311568e801d50fb0555050106]] ></prepay_id><br><trade_type><![CDATA[NATIVE]]></trade_type><br><code_url>![CDATA[weixin://wxpay/bizpayurl?pr =Gj3ZF2b]]</code_url><br></xml></p> <p>If the returned return_code result_code is not SUCCESS and the callback interface does not return any data or the returned data is illegal, the following error will occur </p> <ul class=" list-paddingleft-2"> <li><p>The data field structure returned by the merchant's background is illegal (the format of the returned data packet is incorrect) </p></li> <li><p>Timed out to obtain the merchant's order information or the merchant returned The httpcode is not 200 (no returned data packet)</p></li> </ul> <p>If there are no problems with the above, the last step is left. The merchant's backend system returns the prepay_id to the WeChat payment system. The following is the details Code </p> <pre class="brush:php;toolbar:false">/**  * @author Javen  * 2016年5月14日  * 扫码支付回调(模式一)  */

Public void wxpay () {
Try {
httpservletRequest Request = getRequest () /** ## r 代

##

The above is the detailed content of WeChat scan code payment mode. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn