前段時間寫過一篇關于安卓第三方登錄之微信登錄的文章东臀,后面有朋友留言逢防,希望出一篇關于微信支付的文章,有朋友發(fā)現(xiàn)微信支付的坑很多摇天,而且微信官方文檔讀完了粹湃,也沒太理解恐仑,吐槽微信文檔的朋友不少,于是就有了今天這篇文章为鳄。
首先裳仆,給出官方文檔的地址(需要的朋友,自行閱讀下載)
1孤钦、微信官方的Android集成文檔
2歧斟、微信官方APP端開發(fā)步驟
3、微信官方資源下載
接入流程
1.申請APP_ID
每個應用/游戲要調(diào)用微信的接口都需要有一個微信標志偏形,這個唯一標志通常成為APP_ID静袖, 進入管理中心,創(chuàng)建移動應用,每個開發(fā)者具有10個應用的創(chuàng)建機會,好在創(chuàng)建的應用可以隨時刪除鸿摇。已上線的應用就不建議刪除。申請appid需要填寫應用信息:應用名稱捐康,包名,簽名(根據(jù)微信的簽名工具生成的)庸蔼,icon(2828 & 108108)解总,app下載地址等信息,即可分配到一個appid姐仅。
備注:測試支付時倾鲫,務必使用申請時填寫的keystore文件簽名,包名也需要核對清楚萍嬉,必然無法調(diào)起支付乌昔,返回-1錯誤碼。
2.申請支付能力
在管理中心壤追,查看需要集成支付能力的app磕道,找到“微信支付”一欄,點擊右側(cè)“申請開通”行冰,填寫一些企業(yè)信息后等待審核溺蕉,審核時間為一周左右,審核通過后悼做,會得到一個企業(yè)商戶號及密碼疯特,對公銀行卡中將收到幾分錢,進入商戶平臺肛走,輸入收到的金錢金額以驗證漓雅。驗證通過后即可開始集成支付調(diào)用。在這之前,調(diào)用支付接口是無法完成支付的邻吞。
3组题、添加gradle依賴或者jar包
在build.gradle文件中,添加如下依賴即可:
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}
//或者
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}
//其中抱冷,前者包含統(tǒng)計功能
或者:微信支付依賴包 >>> libammsdk.jar崔列,這個需要下載微信支付的demo,把libs下的這個jar包拷貝到你的項目即可旺遮。
4赵讯、創(chuàng)建微信支付回調(diào)的類WXPayEntryActivity
注意:這個類的包名和目錄結構,必須是你的項目的一級包名 >>wxapi >>WXPayEntryActivity
這個頁面是在你調(diào)起微信支付完成或者取消或者失敗后耿眉,再回到你的App時會調(diào)用的一個頁面边翼。
//微信支付的回調(diào)
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{
private static final String TAG = "WXPayEntryActivity";
private IWXAPI api;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pay_result);
//調(diào)用API前,需要先向微信注冊您的APPID
api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);
api.handleIntent(getIntent(), this);
}
}
這個類中你可以加入支付成功或者失敗后的布局跷敬,如果你不需要展示什么布局讯私,而是要跳轉(zhuǎn)頁面热押,把setContentView刪除即可
回調(diào)結果的處理
@Override
public void onResp(BaseResp resp) {
int errCode = resp.errCode;
Log.i(TAG, "errCode:---->" + errCode);
String result = "";
switch (errCode) {
case 0:
Log.i(TAG, "onResp:支付成功");
result = "支付成功";
tvTitle.setText("支付成功");
break;
case -1:
//可能的原因:簽名錯誤西傀、未注冊APPID、項目設置APPID不正確桶癣、注冊的APPID與設置的不匹配拥褂、其他異常等。
Log.i(TAG, "onResp:支付失敗");
result = "支付失敗,請重試";
finish();
break;
case -2:
//用戶取消支付
Log.i(TAG, "onResp:用戶取消支付");
result = "您取消了支付";
finish();
break;
}
ToastUtils.showToast(this, result);
}
當然牙寞,你也可以參考微信官方APP開發(fā)步驟
下面是回調(diào)的結果碼
怎么還沒有講怎么調(diào)起微信客戶端進行支付敖染椤?有讀者不開心了间雀,別急悔详,因為無論是微信支付還是支付寶支付,調(diào)用支付都不是很復雜的惹挟,這就給大家到來茄螃。
5、調(diào)用微信支付
private void wxPay(WxPayBean wxPayBean){
//WxPayBean是我自己項目的服務器返回的微信支付簽名的數(shù)據(jù)连锯,這個需要你和你們公司后臺對接
WxPayBean.ResultBean result = wxPayBean.getResult();
//調(diào)用API前归苍,需要先向微信注冊您的APPID
IWXAPI wxAPI = WXAPIFactory.createWXAPI(this, MainConstant.Cart.APP_ID);
wxAPI.registerApp(result.getAppid()); // 將該app注冊到微信
PayReq req = new PayReq();
req.appId = result.getAppid(); //微信開放平臺審核通過的應用APPID
req.partnerId = result.getPartnerid(); //商戶號
req.prepayId = result.getPrepayid(); //微信返回的支付交易會話ID
req.packageValue = "Sign=WXPay"; //固定值Sign=WXPay
req.nonceStr = result.getNoncestr(); //隨機字符串
req.timeStamp = result.getTimestamp(); //時間戳
req.sign = result.getSign(); //簽名
//調(diào)起微信支付
wxAPI.sendReq(req);
}
下面是請求調(diào)用微信支付所需要的參數(shù)列表
注意:這些都是后臺傳的,尤其這個簽名字符串运怖,最好是后臺生成拼弃,如果你們服務器大哥不管,你最好找他喝點小酒摇展,嘮嘮嗑
下面是APP發(fā)起支付請求的一個流程
下面是微信開放平臺吻氧,你的應用簽名,這個東西,很多人容易弄錯医男,這個一旦錯了砸狞,就調(diào)不起微信支付的界面了,詳情請移步我的另一篇博客
安卓第三方登錄之微信登錄