微信支付-返回簽名錯誤
阿新 • • 發佈:2018-11-21
Android 微信支付SDK ,支付操作大概3步。
1、生成預支付訂單
2、生成簽名引數
3、調取微信支付頁面
但是需要注意的是,在獲取預支付訂單的時候會報簽名錯誤。
大概也就那幾種可能:
1、微信開放平臺的簽名設定和你當前的的確不一樣,這個需要自己檢查
2、API 密匙不正確,這個需要登陸商戶後臺,修改。
3、商品名中有中文,需要對拼的XML進行編碼ISO8859-1。如下
private String genProductArgs() {
StringBuffer xml = new StringBuffer();
try {
String nonceStr = genNonceStr();
xml.append("</xml>");
List<NameValuePair> packageParams = new LinkedList<NameValuePair>();
// 公眾賬號ID 呼叫介面提交的公眾賬號ID
packageParams.add(new BasicNameValuePair("appid", Constants.APP_ID));
// 商品描述 商品或支付單簡要描述
packageParams.add(new BasicNameValuePair("body", body));
// 商戶號 微信支付分配的商戶號
packageParams.add(new BasicNameValuePair("mch_id", Constants.MCH_ID));
// 隨機字串 微信返回的隨機字串
packageParams.add(new BasicNameValuePair("nonce_str", nonceStr));
// 通知地址 接收微信支付非同步通知回撥地址
packageParams.add(new BasicNameValuePair("notify_url", notify_url));
// 商戶訂單號 商戶系統內部的訂單號,32個字元內、可包含字母,
// 其他說明見商戶訂單號https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=4_2
packageParams.add(new BasicNameValuePair("out_trade_no", out_trade_no));
// 終端IP APP和網頁支付提交使用者端ip,Native支付填呼叫微信支付API的機器IP。
packageParams.add(new BasicNameValuePair("spbill_create_ip", "127.0.0.1"));
// 支付金額單位:分
packageParams.add(new BasicNameValuePair("total_fee", total_fee));
// 交易型別
// 取值如下:JSAPI,NATIVE,APP,WAP,詳細說明見引數規定https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=4_2
packageParams.add(new BasicNameValuePair("trade_type", "APP"));
// 簽名
String sign = genPackageSign(packageParams);
packageParams.add(new BasicNameValuePair("sign", sign));
String xmlstring = toXml(packageParams);
return new String(xmlstring.toString().getBytes(), "ISO8859-1");
} catch (Exception e) {
LogOut.e("genProductArgs fail, ex = " + e.getMessage());
return null;
}
}