Android實現(xiàn)微信支付功能詳解
1.集成微信支付SDK:
在build.gradle中,添加如下依賴
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
2.設置微信支付回調頁面:
路徑:項目包名.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:錯誤……可能的原因:簽名錯誤、未注冊APPID、項目設置APPID不正確、注冊的APPID與設置的不匹配、其他異常等。
-2:用戶取消……無需處理。發(fā)生場景:用戶不支付了,點擊取消,返回APP。
3.設置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.設置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 = "后臺返回的appId";
payReq.partnerId = "后臺返回的partnerId";
payReq.prepayId = "后臺返回的prepayId";
payReq.packageValue = "后臺返回的package";
payReq.nonceStr = "后臺返回的nonceStr";
payReq.timeStamp = "后臺返回的timeStamp";
payReq.signType = "后臺返回的signType";
payReq.sign = signNum();
wxapi.sendReq(payReq);
}
/**
* 拼接sign
*/
public static String signNum() {
String stringA = "appid=" + "后臺返回的appid" +
"&noncestr=" + "后臺返回的noncestr" +
"&package=" + "后臺返回的package" +
"&partnerid=" + "后臺返回的partnerid" +
"&prepayid=" + "后臺返回的prepayid" +
"×tamp=" + "后臺返回的timestamp";
String stringSignTemp = stringA + "&key=" + "后臺商戶服務端的key";
String sign = MD5.getMessageDigest(stringSignTemp.getBytes()).toUpperCase();
return sign;
}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Android中執(zhí)行java命令的方法及java代碼執(zhí)行并解析shell命令
這篇文章給大家介紹Android中執(zhí)行java命令的方法及java代碼執(zhí)行并解析shell命令,需要的朋友一起學習2015-11-11
Android 關于“NetworkOnMainThreadException”問題的原因分析及解決辦法
這篇文章主要介紹了Android 關于“NetworkOnMainThreadException”的相關知識,本文介紹的非常詳細,具有參考借鑒價值,感興趣的朋友一起學習吧2016-02-02
自定義RadioButton和ViewPager實現(xiàn)TabHost帶滑動的頁卡效果
在工作中又很多需求都不是android系統(tǒng)自帶的控件可以達到效果的所以這個時候就要自定義控件來達到效果:使用自定義RadioButton和ViewPager實現(xiàn)TabHost帶滑動的頁卡效果2013-01-01
Android使用CrashHandler來獲取應用的crash信息的方法
本篇文章主要介紹了Android使用CrashHandler來獲取應用的crash信息的方法,具有一定的參考價值,有興趣的可以了解一下2017-09-09

