Android開發(fā)微信APP支付功能的要點(diǎn)小結(jié)
基本概念
包名值得是你APP的包,在創(chuàng)建工程時(shí)候設(shè)置的,需要在微信支付平臺(tái)上面設(shè)置。
簽名指的是你生成APK時(shí)候所用的簽名文件的md5,去掉:全部小寫,需要在微信支付平臺(tái)上面設(shè)置。
調(diào)試階段,簽名文件可以使用調(diào)試用的debug.keystore
,簽名可以直接在eclipse上面查看,或者用工具查看 ,安裝打開輸入包名即可查看。
發(fā)布的時(shí)候一定需要在微信支付平臺(tái)上面設(shè)置成發(fā)布用的簽名值。
官方的Demo里面的內(nèi)容并不是全是必須的,甚至只需要有l(wèi)ibammsdk.jar就夠了,AndroidManifest.xml也不用配置。
AndroidManifest.xml的配置和WXPayEntryActivity.java只是為了能夠得到支付回調(diào),可以先不用去管,先調(diào)試能不能發(fā)起支付。
把libammsdk.jar拷貝到你項(xiàng)目的libs下,并添加jar引用。
代碼里發(fā)起支付請(qǐng)求:
IWXAPI api = WXAPIFactory.createWXAPI(this, Values.WXPAYAPPID); api.registerApp(Values.WXPAYAPPID); // 注冊(cè)APPID,這句很重要,不然不會(huì)發(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、簽名、時(shí)間戳等都是由服務(wù)端返回了,服務(wù)端在生成這些值的時(shí)候需要注意二次簽名的問題。
正常的話微信客戶端就會(huì)打開支付頁面了,那么就可以再著手回調(diào)的事情了。
把WXPayEntryActivity.java拷貝到你項(xiàng)目包下的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ù)你的需要進(jìn)行布局。
為了調(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
的代碼能夠被自動(dòng)執(zhí)行,那么說明你的AndroidManifest.xml里的配置是對(duì)了。
如果你對(duì)你的各項(xiàng)參數(shù)都很有把穩(wěn)了(比如你們iOS組的都能支付了,就你Android的還在坑了),那么看一下api.registerApp(Values.WXPAYAPPID);
有沒有,沒錯(cuò)我就坑死在這里了,這種情況下第一次(很偶爾)的能夠打開支付界面一下,后面都不行了。
總結(jié)
微信為啥不能給點(diǎn)詳細(xì)的錯(cuò)誤代碼或者說明之類,就給一個(gè)-1,天知道是什么意思,真讓人不爽。以上就是Android開發(fā)微信APP支付功能要點(diǎn)的全部內(nèi)容,希望本文的內(nèi)容對(duì)大家開發(fā)Android能有所幫助。
相關(guān)文章
Android判斷現(xiàn)在所處界面是否為home主桌面的方法
這篇文章主要介紹了Android判斷現(xiàn)在所處界面是否為home主桌面的方法,涉及Android界面判斷的相關(guān)技巧,需要的朋友可以參考下2015-05-05Android拼接實(shí)現(xiàn)動(dòng)態(tài)對(duì)象方法詳解
這篇文章主要為大家介紹了Android拼接實(shí)現(xiàn)動(dòng)態(tài)對(duì)象方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Android開發(fā)實(shí)現(xiàn)popupWindow彈出窗口自定義布局與位置控制方法
這篇文章主要介紹了Android開發(fā)實(shí)現(xiàn)popupWindow彈出窗口自定義布局與位置控制方法,涉及Android彈出窗口功能、布局及屬性設(shè)置相關(guān)操作技巧,需要的朋友可以參考下2017-09-09Android 標(biāo)準(zhǔn)Intent的使用詳解
這篇文章主要介紹了Android 標(biāo)準(zhǔn)Intent的使用詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03Android開發(fā)之滑動(dòng)數(shù)值選擇器NumberPicker用法示例
這篇文章主要介紹了Android開發(fā)之滑動(dòng)數(shù)值選擇器NumberPicker用法,結(jié)合實(shí)例形式分析了Android滑動(dòng)數(shù)值選擇器NumberPicker的功能、相關(guān)函數(shù)、事件監(jiān)聽、界面布局等操作技巧,需要的朋友可以參考下2019-03-03Android Studio 實(shí)現(xiàn)九宮格功能
這篇文章主要介紹了Android Studio 實(shí)現(xiàn)九宮格,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04Android和JavaScript相互調(diào)用的方法
這篇文章主要介紹了Android和JavaScript相互調(diào)用的方法,實(shí)例分析了Android的WebView執(zhí)行JavaScript及JavaScript訪問Android的技巧,需要的朋友可以參考下2015-12-12