记录接Android微信支付(干货)
1、添加依赖包,在build.gardle的dependencies里面:
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
2、AndroidManifest.xml配置:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 微信支付 -->
<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="微信APPID" />
</intent-filter>
</activity>
3、选择微信支付界面相关代码
public void WxChatAPP() {
/**
*获取服务器传来微信信息
**/
HttpUtil.WxChatAPPPay(new HttpUtil.HttpCallbackListener() {
@Override
public void onFinish(String response) {
Gson gson = new Gson();
wxxModel = gson.fromJson(response,wxModel.class);
AllOrderListActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
if (wxxModel.getCode()==1){
appid=wxxModel.getResult().getAppid();
partnerId=wxxModel.getResult().getPartnerid();
prepayId=wxxModel.getResult().getPrepayid();
nonceStr=wxxModel.getResult().getNonceStr();
timeStamp=wxxModel.getResult().getTimeStamp();
sign=wxxModel.getResult().getSign();
wxPay(wxxModel.getResult().getPackageX());
}
}
});
}
@Override
public void onError(Exception e) {
}
});
}
private void wxPay(String pagePack){
PayReq req = new PayReq();
req.appId = appid; //APPID
req.partnerId = partnerId; //商户号
req.prepayId = prepayId; //预付款ID
req.nonceStr = nonceStr; //随机数
req.timeStamp = timeStamp; //时间戳
req.packageValue = pagePack; //固定值Sign=WXPay
req.sign = sign; //签名
HttpHeader.iwxapi.sendReq(req);
}
直接在选择微信支付的点击事件里调用 WxChatAPP();
4、WXPayEntryActivity的代码
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
private IWXAPI iwxapi;
private String appid,partnerId,prepayId,nonceStr,timeStamp,sign,pagePack;
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wxpay_entry);
iwxapi = WXAPIFactory.createWXAPI(this, HttpHeader.APP_ID); //初始化微信api
iwxapi.handleIntent(getIntent(),this);
}
@Override
public void onReq(BaseReq baseReq) {
}
@Override
public void onResp(BaseResp resp) {
String result = "";
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
result = "微信支付成功";
break;
case BaseResp.ErrCode.ERR_COMM:
result = "微信支付失败:" + resp.errCode + "," + resp.errStr;
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
result = "微信支付取消:" + resp.errCode + "," + resp.errStr;
break;
default:
result = "微信支付未知异常:" + resp.errCode + "," + resp.errStr;
break;
}
}
Toast.makeText(this, result, Toast.LENGTH_LONG).show();
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
iwxapi.handleIntent(intent, this);
}
}
其中HttpHeader.APP_ID和HttpHeader.iwxapi是我定义在HttpHeader里面变量

微信支付亲测有效!!!!
注意点:
- 在工程包名下根目录新建wxapi包,这个wxapi包的位置一定要是包名根目录,包名也不能错。在该包下新建回调类WXPayEntryActivity,该类的名字一定是在wxapi包下,名字也一定是WXPayEntryActivity。因为它是微信回调的接口,如果改变位置或名字,就会导致微信无法将支付结果反馈,从而导致支付失败。

- 支付成功后,回调的操作可写在onResp里面。
- 补充点,小程序接微信支付方法类似,所需的信息都是服务器传给我们,最大的区别是小程序需要判断账户的登录授权操作,所以服务器通过我们传一个最新生成的code(通过wx.login获取的 )来生成openId......授权成功以后返回微信支付所需相关参数信息给我们。
作者:Aylson.Fu
出处:https://www.cnblogs.com/formybestlife/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。非常感谢~

浙公网安备 33010602011771号