Android開發(fā)微信APP支付功能的要點小結(jié)
基本概念
包名值得是你APP的包,在創(chuàng)建工程時候設(shè)置的,需要在微信支付平臺上面設(shè)置。
簽名指的是你生成APK時候所用的簽名文件的md5,去掉:全部小寫,需要在微信支付平臺上面設(shè)置。
調(diào)試階段,簽名文件可以使用調(diào)試用的debug.keystore,簽名可以直接在eclipse上面查看,或者用工具查看 ,安裝打開輸入包名即可查看。
發(fā)布的時候一定需要在微信支付平臺上面設(shè)置成發(fā)布用的簽名值。
官方的Demo里面的內(nèi)容并不是全是必須的,甚至只需要有l(wèi)ibammsdk.jar就夠了,AndroidManifest.xml也不用配置。
AndroidManifest.xml的配置和WXPayEntryActivity.java只是為了能夠得到支付回調(diào),可以先不用去管,先調(diào)試能不能發(fā)起支付。
把libammsdk.jar拷貝到你項目的libs下,并添加jar引用。
代碼里發(fā)起支付請求:
IWXAPI api = WXAPIFactory.createWXAPI(this, Values.WXPAYAPPID);
api.registerApp(Values.WXPAYAPPID); // 注冊APPID,這句很重要,不然不會發(fā)起調(diào)用
PayReq req = new PayReq();
req.appId = wxPay.appid;// 也就是Values.WXPAYAPPID,如果二者不一致的話是沒法發(fā)起支付的。
req.partnerId = json.getString("partnerid");
req.prepayId = json.getString("prepayid");
req.nonceStr = json.getString("noncestr");
req.timeStamp = json.getString("timestamp");
req.packageValue = json.getString("package");
req.sign = json.getString("sign");
//req.extData = "";// "app data"; // optional
boolean r = api.sendReq(req);
if(!r) {
Toast.makeText(this,"打開微信支付失敗!",Toast.LENGTH_SHORT).show();
}
上面的代碼中相關(guān)的預(yù)下單ID、簽名、時間戳等都是由服務(wù)端返回了,服務(wù)端在生成這些值的時候需要注意二次簽名的問題。
正常的話微信客戶端就會打開支付頁面了,那么就可以再著手回調(diào)的事情了。
把WXPayEntryActivity.java拷貝到你項目包下的wxapi文件夾中,比如你的包名是com.xx.shop,那么就放到com.xx.shop.wxapi下面。
設(shè)置AndroidManifest.xml,讓其支持回調(diào):
<activity android:name=".wxapi.WXPayEntryActivity" android:screenOrientation="portrait" android:exported="true" android:launchMode="singleTop"> <intent-filter> <action android:name="android.intent.action.VIEW"/><category android:name="android.intent.category.DEFAULT"/><data android:scheme="你的APPID"/> </intent-filter>/> </activity>
WXPayEntryActivity.java不需要布局文件的,或者可以根據(jù)你的需要進行布局。
為了調(diào)試方便,把WXPayEntryActivity.java中onResp的代碼改為:
@Override
public void onResp(BaseResp resp) {
Log.d("onPayFinish", "onPayFinish, errCode = " + resp.errCode);
if(resp.errCode==0){
Toast.makeText(this,"支付成功!",Toast.LENGTH_SHORT).show();
}else if(resp.errCode==-1){
Toast.makeText(this,"支付失敗!",Toast.LENGTH_SHORT).show();
}else if(resp.errCode==-2){
Toast.makeText(this,"取消支付!",Toast.LENGTH_SHORT).show();
}
}
不管能不能支付成功,如果onResp的代碼能夠被自動執(zhí)行,那么說明你的AndroidManifest.xml里的配置是對了。
如果你對你的各項參數(shù)都很有把穩(wěn)了(比如你們iOS組的都能支付了,就你Android的還在坑了),那么看一下api.registerApp(Values.WXPAYAPPID);有沒有,沒錯我就坑死在這里了,這種情況下第一次(很偶爾)的能夠打開支付界面一下,后面都不行了。
總結(jié)
微信為啥不能給點詳細的錯誤代碼或者說明之類,就給一個-1,天知道是什么意思,真讓人不爽。以上就是Android開發(fā)微信APP支付功能要點的全部內(nèi)容,希望本文的內(nèi)容對大家開發(fā)Android能有所幫助。
相關(guān)文章
Android無障礙自動化結(jié)合opencv實現(xiàn)支付寶能量自動收集操作方法
opencv可以進行圖像識別,兩者結(jié)合在一起即可實現(xiàn)支付寶能量自動收集,opencv用于識別能量,無障礙服務(wù)用于模擬手勢,即點擊能量,這篇文章主要介紹了Android無障礙自動化結(jié)合opencv實現(xiàn)支付寶能量自動收集,需要的朋友可以參考下2024-07-07
Android中使用SeekBar拖動條實現(xiàn)改變圖片透明度(代碼實現(xiàn))
這篇文章主要介紹了Android中使用SeekBar拖動條實現(xiàn)改變圖片透明度,需要的朋友可以參考下2020-01-01
Android 創(chuàng)建與解析XML(四)——詳解Pull方式
本篇文章主要介紹了Android創(chuàng)建與解析XML(二)——詳解Pull方式,這里整理了詳細的代碼,有需要的小伙伴可以參考下。2016-11-11
android支付寶客戶端html5網(wǎng)頁無法自動關(guān)閉問題的解決方法
這篇文章主要為大家詳細介紹了android支付寶客戶端html5網(wǎng)頁無法自動關(guān)閉問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04
Android?IdleHandler基本使用及應(yīng)用案例詳解
這篇文章主要為大家詳細介紹了Android?IdleHandler的基本使用及應(yīng)用案例,文中的示例代碼講解詳細,具有一定的參考價值,需要的可以參考一下2022-10-10
Android ProgressBar實現(xiàn)進度條效果
這篇文章主要為大家詳細介紹了Android ProgressBar實現(xiàn)進度條效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04
Android用ListView顯示SDCard文件列表的小例子
本文簡單實現(xiàn)了用ListView顯示SDCard文件列表,目錄的回退等功能暫不討論,獲取文件列表,files即為所選擇目錄下的所有文件列表2013-11-11
Android中關(guān)于相對布局RelativeLayout的技巧匯總
RelativeLayout是相對布局控件,以控件之間相對位置或相對父容器位置進行排列。下面這篇文章主要給大家介紹了關(guān)于Android中相對布局RelativeLayout的一些技巧,需要的朋友可以參考借鑒,下面來一起看看吧。2017-02-02

