博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android集成微信支付
阅读量:6591 次
发布时间:2019-06-24

本文共 2863 字,大约阅读时间需要 9 分钟。

hot3.png

我之前集成过Ping++这种第三方的支付,但没有单单针对微信官方的支付集成过,这次做遇到很多坑,记录下。

微信支付的过程:

首先在微信开放平台上申请AppID,在开放平台的应用管理中将你的应用启用支付功能,这是前提。交互过程是服务端根据商品名称价格等信息向微信的sdk请求生成一个prepayid,给app提供一个接口,在app带着商品信息调用这个接口时,将prepayid返回给app,然后app用这个prepayid调用本地的sdk,唤起微信支付页面,后面的过程基本都是微信sdk去处理了,我们只需要在WXPayEntryActivity中处理支付的回调方法即可。

除了prepayid外,还需要其他一些数据,服务端也要返回到app,这些字段的具体含义在官方文档上可以查看。

JSONObject prapay = new JSONObject(data);weChatPay.setAppid(prapay.getString("appid"));weChatPay.setNoncestr(prapay.getString("noncestr"));weChatPay.setPackageValue(prapay.getString("package"));weChatPay.setPartnerid(prapay.getString("partnerid"));weChatPay.setPrepayid(prapay.getString("prepayid"));weChatPay.setSign(prapay.getString("sign"));weChatPay.setTimestamp(prapay.getString("timestamp"));weChatPay.setTrade_no(prapay.getString("trade_no"));

我这里是将这些信息封装起来了,拿到信息之后,就要向微信sdk服务器发送支付请求了。

private void sendRequestToWechat(WeChatPay weChatPay) {	api = WXAPIFactory.createWXAPI(this, weChatPay.getAppid());	api.registerApp(weChatPay.getAppid());	PayReq request = new PayReq();	request.appId = weChatPay.getAppid();	request.partnerId = weChatPay.getPartnerid();	request.prepayId = weChatPay.getPrepayid();	request.packageValue = weChatPay.getPackageValue();	request.nonceStr = weChatPay.getNoncestr();	request.timeStamp = weChatPay.getTimestamp();	request.sign = weChatPay.getSign();	api.sendReq(request);}

这样就调起了微信支付页面,支付完成后的回调是在WXPayEntryActivity中,在onResp方法中根据返回的结果码来判断支付结果:

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);        api = WXAPIFactory.createWXAPI(this, AppId);        api.handleIntent(getIntent(), this);    }    @Override protected void onNewIntent(Intent intent) {        super.onNewIntent(intent);        setIntent(intent);        api.handleIntent(intent, this);    }    @Override public void onReq(BaseReq req) {        Log.d(TAG, "-------------" + req.getType());    }    @Override public void onResp(BaseResp resp) {        Log.d(TAG, "微信支付回调:---------" + resp.errCode);        if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {            if (resp.errCode == 0) {                LogUtil.d(TAG, "支付成功");            } else if (resp.errCode == -1) {                ToastBlack.showText(this, "支付失败:" + String.valueOf(resp.errStr), false);            } else if (resp.errCode == -2) {                ToastBlack.showText(this, "取消支付", false);            }            finish();        }    }}

另外还需要在AndroidManifest中配置activity:

需要注意的是,如果你的应用之前有集成过第三方的微信分享,那么久不需要导入libammsdk.jar这个jar包了,否则会报如下错误: Error:(10, 8) 错误: WXEntryActivity不是抽象的, 并且未覆盖IWXAPIEventHandler中的抽象方法onResp(BaseResp)

转载于:https://my.oschina.net/shenhuniurou/blog/863393

你可能感兴趣的文章
线程池管理的工具类,封装类
查看>>
day10,11-Python 基本数据类型介绍之数字与字符串(看看就好)
查看>>
JAVA API----Math类和Random类
查看>>
Python3 - 时间处理与定时任务
查看>>
转:深入理解Java G1垃圾收集器
查看>>
[Java基础]Java异常捕获
查看>>
wp7 断点续传
查看>>
Js跳转网页的几种方法
查看>>
python 查看与更换工作目录
查看>>
添加删除替换插入到某个接点的方法?
查看>>
求js数组中最小值
查看>>
学习笔记之机器学习(Machine Learning)
查看>>
正确率、召回率和 F 值
查看>>
UVA10018 Reverse and Add
查看>>
nodejs实现简易MVC
查看>>
【转载】CocoaPods安装和使用教程
查看>>
Kettle提高输入输出数据总结
查看>>
7.16学习进度
查看>>
python之字符编码(三)
查看>>
前三次作业总结——分析与反思
查看>>