记录接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/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。非常感谢~