微信掃碼支付模式

PHPz
發布: 2017-04-04 11:30:11
原創
6808 人瀏覽過

微信掃碼支付(模式一)


微信掃碼支付遇到的問題

  • #原生支付URL參數錯誤

  • 回呼

    介面
  • URL有回呼,但是接收不到參數

商家後台傳回的資料欄位結構不合法
  • 取得商家訂單資訊逾時或商家傳回的httpcode非200

##解決問題



原生支付URL參數錯誤

這個錯誤一般會出現在取得到二維碼URL之後產生二維碼微信掃碼的時候。如果你出現此類型的問題請檢查

  • 1、產生二維碼所需參數清單中參數是否有錯誤(區分大小寫)

    2、參數中簽章sign時候正確簽章演算法  簽章校驗工具

  • 以下是產生二維碼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);
}
登入後複製
回呼介面URL有回調,但是接收不到參數

Enumeration  en=getParaNames();

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

#以上程式碼中輸出的參數都為

NULL


由於官方的文檔描述不是很清楚,大家都以為回呼請求將帶productid和用戶的openid等參數是以普通的參數一樣,其實這個回調返回的參數是一個
XML
輸入流

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");
登入後複製

result結果為



< ;return_msg> ;![CDATA[1322117501]]>

##;#;#; [842C1857EDD009D67519527BCF3AFA4C]]>

01d50fb0555050106]] >
  • #![CDATA[weixin://wxfpay/biz

    ![CDATA[weixin://wxf/bizpayt. =Gj3ZF2b]]

  • 如果傳回的return_code  result_code 不為SUCCESS 而回呼的介面沒有傳回任何資料或傳回的資料不合法就會出現下列錯誤

商家後台傳回的資料欄位結構不合法(傳回的資料包格式不正確)


取得商家訂單資訊逾時或商家傳回的httpcode非200(沒有回傳的資料包)

如果以上都沒有問題,就剩下最後一個步驟了 商戶後台系統將prepay_id回傳給微信支付系統 以下是詳細的程式碼

/**
 * @author Javen
 * 2016年5月14日
 * 扫码支付回调(模式一)
 */
登入後複製
public void wxpay(){###        try {###            HttpServletRequest request = getRequest();###    HttpServletRequest request = getRequest();###  

以上是微信掃碼支付模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!