前段時(shí)間寫(xiě)過(guò)一篇關(guān)于安卓第三方登錄之微信登錄的文章,后面有朋友留言,希望出一篇關(guān)于微信支付的文章,有朋友發(fā)現(xiàn)微信支付的坑很多,而且微信官方文檔讀完了,也沒(méi)太理解,吐槽微信文檔的朋友不少,于是就有了今天這篇文章。
首先,給出官方文檔的地址(需要的朋友,自行閱讀下載)
1、微信官方的Android集成文檔
2、微信官方APP端開(kāi)發(fā)步驟
3、微信官方資源下載
接入流程
1.申請(qǐng)APP_ID
每個(gè)應(yīng)用/游戲要調(diào)用微信的接口都需要有一個(gè)微信標(biāo)志,這個(gè)唯一標(biāo)志通常成為APP_ID, 進(jìn)入管理中心,創(chuàng)建移動(dòng)應(yīng)用,每個(gè)開(kāi)發(fā)者具有10個(gè)應(yīng)用的創(chuàng)建機(jī)會(huì),好在創(chuàng)建的應(yīng)用可以隨時(shí)刪除。已上線的應(yīng)用就不建議刪除。申請(qǐng)appid需要填寫(xiě)應(yīng)用信息:應(yīng)用名稱,包名,簽名(根據(jù)微信的簽名工具生成的),icon(2828 & 108108),app下載地址等信息,即可分配到一個(gè)appid。
備注:測(cè)試支付時(shí),務(wù)必使用申請(qǐng)時(shí)填寫(xiě)的keystore文件簽名,包名也需要核對(duì)清楚,必然無(wú)法調(diào)起支付,返回-1錯(cuò)誤碼。
2.申請(qǐng)支付能力
在管理中心,查看需要集成支付能力的app,找到“微信支付”一欄,點(diǎn)擊右側(cè)“申請(qǐng)開(kāi)通”,填寫(xiě)一些企業(yè)信息后等待審核,審核時(shí)間為一周左右,審核通過(guò)后,會(huì)得到一個(gè)企業(yè)商戶號(hào)及密碼,對(duì)公銀行卡中將收到幾分錢(qián),進(jìn)入商戶平臺(tái),輸入收到的金錢(qián)金額以驗(yàn)證。驗(yàn)證通過(guò)后即可開(kāi)始集成支付調(diào)用。在這之前,調(diào)用支付接口是無(wú)法完成支付的。


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)計(jì)功能
或者:微信支付依賴包 >>> libammsdk.jar,這個(gè)需要下載微信支付的demo,把libs下的這個(gè)jar包拷貝到你的項(xiàng)目即可。
4、創(chuàng)建微信支付回調(diào)的類WXPayEntryActivity
注意:這個(gè)類的包名和目錄結(jié)構(gòu),必須是你的項(xiàng)目的一級(jí)包名 >>wxapi >>WXPayEntryActivity

這個(gè)頁(yè)面是在你調(diào)起微信支付完成或者取消或者失敗后,再回到你的App時(shí)會(huì)調(diào)用的一個(gè)頁(yè)面。
//微信支付的回調(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前,需要先向微信注冊(cè)您的APPID
api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);
api.handleIntent(getIntent(), this);
}
}
這個(gè)類中你可以加入支付成功或者失敗后的布局,如果你不需要展示什么布局,而是要跳轉(zhuǎn)頁(yè)面,把setContentView刪除即可
回調(diào)結(jié)果的處理
@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:
//可能的原因:簽名錯(cuò)誤、未注冊(cè)APPID、項(xiàng)目設(shè)置APPID不正確、注冊(cè)的APPID與設(shè)置的不匹配、其他異常等。
Log.i(TAG, "onResp:支付失敗");
result = "支付失敗,請(qǐng)重試";
finish();
break;
case -2:
//用戶取消支付
Log.i(TAG, "onResp:用戶取消支付");
result = "您取消了支付";
finish();
break;
}
ToastUtils.showToast(this, result);
}
當(dāng)然,你也可以參考微信官方APP開(kāi)發(fā)步驟
下面是回調(diào)的結(jié)果碼

怎么還沒(méi)有講怎么調(diào)起微信客戶端進(jìn)行支付???有讀者不開(kāi)心了,別急,因?yàn)闊o(wú)論是微信支付還是支付寶支付,調(diào)用支付都不是很復(fù)雜的,這就給大家到來(lái)。
5、調(diào)用微信支付
private void wxPay(WxPayBean wxPayBean){
//WxPayBean是我自己項(xiàng)目的服務(wù)器返回的微信支付簽名的數(shù)據(jù),這個(gè)需要你和你們公司后臺(tái)對(duì)接
WxPayBean.ResultBean result = wxPayBean.getResult();
//調(diào)用API前,需要先向微信注冊(cè)您的APPID
IWXAPI wxAPI = WXAPIFactory.createWXAPI(this, MainConstant.Cart.APP_ID);
wxAPI.registerApp(result.getAppid()); // 將該app注冊(cè)到微信
PayReq req = new PayReq();
req.appId = result.getAppid(); //微信開(kāi)放平臺(tái)審核通過(guò)的應(yīng)用APPID
req.partnerId = result.getPartnerid(); //商戶號(hào)
req.prepayId = result.getPrepayid(); //微信返回的支付交易會(huì)話ID
req.packageValue = "Sign=WXPay"; //固定值Sign=WXPay
req.nonceStr = result.getNoncestr(); //隨機(jī)字符串
req.timeStamp = result.getTimestamp(); //時(shí)間戳
req.sign = result.getSign(); //簽名
//調(diào)起微信支付
wxAPI.sendReq(req);
}
下面是請(qǐng)求調(diào)用微信支付所需要的參數(shù)列表
注意:這些都是后臺(tái)傳的,尤其這個(gè)簽名字符串,最好是后臺(tái)生成,如果你們服務(wù)器大哥不管,你最好找他喝點(diǎn)小酒,嘮嘮嗑

下面是APP發(fā)起支付請(qǐng)求的一個(gè)流程

下面是微信開(kāi)放平臺(tái),你的應(yīng)用簽名,這個(gè)東西,很多人容易弄錯(cuò),這個(gè)一旦錯(cuò)了,就調(diào)不起微信支付的界面了,詳情請(qǐng)移步我的另一篇博客
安卓第三方登錄之微信登錄
