1. 程式人生 > >微信支付-返回簽名錯誤

微信支付-返回簽名錯誤

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; } }