場景
最近新的App要集成微信支付,因爲知道微信支付的坑比較 多,雖然之前的App集成過微信支付,但是挪過照搬過來的時候還是小心翼翼的,可結果還是不盡如人意啊,偏偏遇到了ios提示簽名錯誤,Android 調用微信白屏並且errCode=-1的結果,根據微信官方對該code的解釋,我們Android、ios兩端和後臺來來回回覈對了好幾遍簽名、APPID和後臺訂單參數的處理,仍然沒有任何的頭緒,經過一天多的各種查找測試,後臺同事一聲大罵,發現了拷貝的微信官方java文件WXPAY.java裏關於sign加密類型處理的判斷纔是根源所在。,代碼如下:
if (useSandbox) {
this.signType = SignType.MD5;
} else {
this.signType = SignType.HMACSHA256;
}
其他博文普遍提到的微信支付的坑
- APPID是否和微信開放平臺申請的一致。
- 後臺設置的簽名是商戶平臺設置的密鑰。
- WXPayEntryActivity.java和wxapi包拷貝到項目的文件夾的位置是否正確。
- 在Manifest中是否聲明瞭WXPayEntryActivity類,如代碼:
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop"/>
客戶端調用微信的判斷
關於客戶端調用微信的方法,微信官方文檔也沒有說明,大多數的博文也是一筆帶過,如下代碼:
final String APPID = "wxd930ea5d5a258f4f";
IWXAPI msgApi = WXAPIFactory.createWXAPI(context, APPID, false);
msgApi.registerApp(APPID);
if (!msgApi.isWXAppInstalled()) {
Toast.makeText(this, "未安裝微信",Toast.LENGTH_SHORT).show();
} else if (!msgApi.isWXAppSupportAPI()) {
Toast.makeText(this, "當前微信版本不支持支付",Toast.LENGTH_SHORT).show();
} else {
}
在測試支付的時候發現,在不是最新版本的微信上,雖然API的isWXAppSupportAPI()判斷提示當前微信版本不支持支付,但是實際卻可以調用起來微信進行支付,因此我只採用了isWXAppInstalled()方法判斷,如果安裝了則直接調用微信進行支付。
在IOS上,多數廠商的App採用的是先調用API的openWXApp()方法,然後調用微信支付。