微信掃碼支付(模式一)
微信掃碼支付遇到的問題
原生支付URL參數(shù)錯(cuò)誤
回調(diào)接口URL有回調(diào),但是接收不到參數(shù)
商戶后臺(tái)返回的數(shù)據(jù)字段結(jié)構(gòu)不合法
獲取商戶訂單信息超時(shí)或者商戶返回的httpcode非200
解決問題
原生支付URL參數(shù)錯(cuò)誤
這個(gè)錯(cuò)誤一般會(huì)出現(xiàn)在獲取到二維碼URL之后生成二維碼微信掃碼的時(shí)候。如果你出現(xiàn)此類型的問題請檢查
1、生成二維碼所需參數(shù)列表中參數(shù)是否有錯(cuò)誤(區(qū)分大小寫)
2、參數(shù)中簽名sign時(shí)候正確 簽名算法 ? 簽名校驗(yàn)工具
以下是生成二維碼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); }
-
回調(diào)接口URL有回調(diào),但是接收不到參數(shù)
Enumeration
?en=getParaNames(); ??while?(en.hasMoreElements())?{ ??????Object?o=?en.nextElement(); ??????System.out.println(o.toString()+"="+getPara(o.toString())); ??}
以上代碼中輸出的參數(shù)都為NULL
由于官方的文檔描述不是很清楚,大家都以為回調(diào)請求將帶productid和用戶的openid等參數(shù)是以普通的參數(shù)一樣,其實(shí)這個(gè)回調(diào)返回的參數(shù)是一個(gè)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結(jié)果為
public void wxpay(){ Atas ialah kandungan terperinci 微信掃碼支付模式. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!
? ? ? ?try {
? ? ? ? ? ?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");
????????System.out.println("callback>>>>"+result);
????????/**
?????????*?獲取返回的信息內(nèi)容中各個(gè)參數(shù)的值
?????????*/
????????Map<String, String>?map?=?PaymentKit.xmlToMap(result);
????????for?(String?key?:?map.keySet())?{
???????????????System.out.println("key=?"+?key?+?"?and?value=?"?+?map.get(key));
????????}
????????String?appid=map.get("appid");
????????String?openid?=?map.get("openid");
????????String?mch_id?=?map.get("mch_id");
????????String?is_subscribe?=?map.get("is_subscribe");
????????String?nonce_str?=?map.get("nonce_str");
????????String?product_id?=?map.get("product_id");
????????String?sign?=?map.get("sign");
????????Map<String, String>?packageParams?=?new?HashMap<String, String>();
????????packageParams.put("appid",?appid);
????????packageParams.put("openid",?openid);
????????packageParams.put("mch_id",mch_id);
????????packageParams.put("is_subscribe",is_subscribe);
????????packageParams.put("nonce_str",nonce_str);
????????packageParams.put("product_id",?product_id);
????????String?packageSign?=?PaymentKit.createSign(packageParams,?paternerKey);
????????//?統(tǒng)一下單文檔地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
????????Map<String, String>?params?=?new?HashMap<String, String>();
????????params.put("appid",?appid);
????????params.put("mch_id",?mch_id);
????????params.put("body",?"測試掃碼支付");
????????String?out_trade_no=Long.toString(System.currentTimeMillis());
????????params.put("out_trade_no",?out_trade_no);
????????int?price=((int)(Float.valueOf(10)*100));
????????params.put("total_fee",?price+"");
????????params.put("attach",?out_trade_no);
????????String?ip?=?IpKit.getRealIp(getRequest());
????????if?(StrKit.isBlank(ip))?{
????????????ip?=?"127.0.0.1";
????????}
????????params.put("spbill_create_ip",?ip);
????????params.put("trade_type",?TradeType.NATIVE.name());
????????params.put("nonce_str",?System.currentTimeMillis()?/?1000?+?"");
????????params.put("notify_url",?notify_url);
????????params.put("openid",?openid);
????????String?paysign?=?PaymentKit.createSign(params,?paternerKey);
????????params.put("sign",?paysign);
????????String?xmlResult?=?PaymentApi.pushOrder(params);
????????System.out.println("prepay_xml>>>"+xmlResult);
????????/**
?????????*?發(fā)送信息給微信服務(wù)器
?????????*/
????????Map<String, String>?payResult?=?PaymentKit.xmlToMap(xmlResult);
????????String?return_code?=?payResult.get("return_code");
????????String?result_code?=?payResult.get("result_code");
????????if?(StrKit.notBlank(return_code)?&&?StrKit.notBlank(result_code)?&&?return_code.equalsIgnoreCase("SUCCESS")&&result_code.equalsIgnoreCase("SUCCESS"))?{
????????????//?以下字段在return_code?和result_code都為SUCCESS的時(shí)候有返回
????????????String?prepay_id?=?payResult.get("prepay_id");
????????????Map<String, String>?prepayParams?=?new?HashMap<String, String>();
????????????prepayParams.put("return_code",?"SUCCESS");
????????????prepayParams.put("appId",?appid);
????????????prepayParams.put("mch_id",?mch_id);
????????????prepayParams.put("nonceStr",?System.currentTimeMillis()?+?"");
????????????prepayParams.put("prepay_id",?prepay_id);
????????????String?prepaySign?=?null;
????????????if?(sign.equals(packageSign))?{
????????????????prepayParams.put("result_code",?"SUCCESS");
????????????}else?{
????????????????prepayParams.put("result_code",?"FAIL");
????????????????prepayParams.put("err_code_des",?"訂單失效");???//result_code為FAIL時(shí),添加該鍵值對,value值是微信告訴客戶的信息
????????????}
????????????prepaySign?=?PaymentKit.createSign(prepayParams,?paternerKey);
????????????prepayParams.put("sign",?prepaySign);
????????????String?xml?=?PaymentKit.toXml(prepayParams);
????????????log.error(xml);
????????????renderText(xml);
????????}
????}?catch?(UnsupportedEncodingException?e)?{
????????//?TODO?Auto-generated?catch?block
????????e.printStackTrace();
????}?catch?(IOException?e)?{
????????//?TODO?Auto-generated?catch?block
????????e.printStackTrace();
????}
}

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)