Android實(shí)現(xiàn)微信支付功能詳解
1.集成微信支付SDK:
在build.gradle中,添加如下依賴
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
2.設(shè)置微信支付回調(diào)頁面:
路徑:項(xiàng)目包名.wxapi
名稱:WXPayEntryActivity
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
private IWXAPI api;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.wx_pay_result);
api = WXAPIFactory.createWXAPI(this, "你的APP_ID");
api.handleIntent(getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
}
@Override
public void onResp(BaseResp resp) {
int errCode = resp.errCode;
}
}
errCode:說明
0:成功……展示成功頁面。
-1:錯(cuò)誤……可能的原因:簽名錯(cuò)誤、未注冊APPID、項(xiàng)目設(shè)置APPID不正確、注冊的APPID與設(shè)置的不匹配、其他異常等。
-2:用戶取消……無需處理。發(fā)生場景:用戶不支付了,點(diǎn)擊取消,返回APP。
3.設(shè)置Manifest
<activity android:name=".wxapi.WXPayEntryActivity" 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="你的APP_ID" /> </intent-filter> </activity>
4.設(shè)置MD5
public class MD5 {
private MD5() {
}
public final static String getMessageDigest(byte[] buffer) {
char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
try {
MessageDigest mdTemp = MessageDigest.getInstance("MD5");
mdTemp.update(buffer);
byte[] md = mdTemp.digest();
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
} catch (Exception e) {
return null;
}
}
}
5.發(fā)起微信支付
/**
* 注冊微信支付
*/
private void registerWx() {
IWXAPI wxapi = WXAPIFactory.createWXAPI(context, null);
wxapi.registerApp("你的APP_ID");
}
/**
* 發(fā)起微信支付
*/
private void wxPay() {
PayReq payReq = new PayReq();
payReq.appId = "后臺(tái)返回的appId";
payReq.partnerId = "后臺(tái)返回的partnerId";
payReq.prepayId = "后臺(tái)返回的prepayId";
payReq.packageValue = "后臺(tái)返回的package";
payReq.nonceStr = "后臺(tái)返回的nonceStr";
payReq.timeStamp = "后臺(tái)返回的timeStamp";
payReq.signType = "后臺(tái)返回的signType";
payReq.sign = signNum();
wxapi.sendReq(payReq);
}
/**
* 拼接sign
*/
public static String signNum() {
String stringA = "appid=" + "后臺(tái)返回的appid" +
"&noncestr=" + "后臺(tái)返回的noncestr" +
"&package=" + "后臺(tái)返回的package" +
"&partnerid=" + "后臺(tái)返回的partnerid" +
"&prepayid=" + "后臺(tái)返回的prepayid" +
"×tamp=" + "后臺(tái)返回的timestamp";
String stringSignTemp = stringA + "&key=" + "后臺(tái)商戶服務(wù)端的key";
String sign = MD5.getMessageDigest(stringSignTemp.getBytes()).toUpperCase();
return sign;
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android中執(zhí)行java命令的方法及java代碼執(zhí)行并解析shell命令
這篇文章給大家介紹Android中執(zhí)行java命令的方法及java代碼執(zhí)行并解析shell命令,需要的朋友一起學(xué)習(xí)2015-11-11
Android 關(guān)于“NetworkOnMainThreadException”問題的原因分析及解決辦法
這篇文章主要介紹了Android 關(guān)于“NetworkOnMainThreadException”的相關(guān)知識(shí),本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-02-02
Android 字符串中某個(gè)字段可點(diǎn)擊和設(shè)置顏色的方法
在android開發(fā)中,我們時(shí)常會(huì)遇到對字符串中某些固定的字段實(shí)現(xiàn)可點(diǎn)擊和顏色的設(shè)置,現(xiàn)粘貼處我在開發(fā)中如何設(shè)置這些屬性的2017-07-07
自定義RadioButton和ViewPager實(shí)現(xiàn)TabHost帶滑動(dòng)的頁卡效果
在工作中又很多需求都不是android系統(tǒng)自帶的控件可以達(dá)到效果的所以這個(gè)時(shí)候就要自定義控件來達(dá)到效果:使用自定義RadioButton和ViewPager實(shí)現(xiàn)TabHost帶滑動(dòng)的頁卡效果2013-01-01
Android使用CrashHandler來獲取應(yīng)用的crash信息的方法
本篇文章主要介紹了Android使用CrashHandler來獲取應(yīng)用的crash信息的方法,具有一定的參考價(jià)值,有興趣的可以了解一下2017-09-09
Android開發(fā)中關(guān)于組件導(dǎo)出的風(fēng)險(xiǎn)及防范
這篇文章主要介紹了Android開發(fā)中關(guān)于組件導(dǎo)出的風(fēng)險(xiǎn)及防范,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09

