记录下关于安卓项目集成微信支付的过程
第一次做APP集成微信支付的功能,由于没做过遇到好多问题,这里总结下。
1.准备工作,这部分是真正耗时的部分(如果你只负责代码部分请忽略)
第一步,你要申请个微信开放平台的账号,登录之后进入账号中心尽快进行开发者资质认证(如果资料没问题1-2天就可以完成此项工作)。
第二步,点击管理中心创建应用,也就是你需要集成支付功能的app,如下。(在此之前你需要对自己的应用签名,因为后面创建应用需要你的签名信息。直接使用官方给的工具即可签名工具下载地址https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk,)
然后完善应用的信息,如下,你需要准备两种应用水印,格式如图
第三步,当你完成应用的创建,你以为就可以集成代码,一帆风顺了嘛,no!首先是微信官方对你填写应用信息的审核,接下来进入管理中心,找到你创建的应用还需要申请开通APP支付功能。
有经验的小伙伴,会在此之前准备好各种资料包括甲方公司的各种资质证明,入驻商户相关经营执照,app的一些截图,说明等等,哎。完成下面的4步,并且等待审核完成(又是该死的审核),才可以集成代码,
2.代码集成(到这里说明你申请的支付功能已经审核通过,微信官网集成步骤很详细,老老实实按步骤来,都没问题。我只写下自己关注的地方)
1.集成微信sdk后,刚开始看官方文档、看demo的时候,有种这是哪,我在哪,我该干啥完全一懵B的状态,什么统一下单接口,什么调起支付接口该什么时候用。fuck,最后发现APP端屁都不用干,只需要简单完成下面的步骤就行。
a.demo有个wxapi的包,把它cpoy到你的项目里,包括里面的java类及相关布局文件。注意所有名字都不要变。
b.在你APP需要调起支付的界面,注册微信。
// IWXAPI 是第三方app和微信通信的openapi接口 private IWXAPI api;
// 通过WXAPIFactory工厂,获取IWXAPI的实例 api = WXAPIFactory.createWXAPI(this, Constants.APP_ID, false); api.registerApp(Constants.APP_ID);c.把选好的商品信息发给后台,后台的兄弟拿到这些信息,调用统一下单接口进行签名,并把签名数据信息返给你,具体如下。
if(common.getCode().equals("200")){ weixin =common.getWeixin();
PayReq request = new PayReq(); request.appId = weixin.getAppid();//应用ID request.partnerId = weixin.getPartnerid();//商户号 request.packageValue = "Sign=WXPay";//扩展字段 request.prepayId=weixin.getPrepayid();//预支付交易会话ID request.nonceStr= weixin.getNoncestr();//随机字符串 request.timeStamp= weixin.getTimestamp();//时间戳 request.sign= weixin.getSign();//签名 api.sendReq(request);//调起微信支付界面
}
接下来就是进入微信的支付界面支付。OK,完成了,就这么简单。什么?完成支付后返回空白界面?
还记的wxapi包里
WXPayEntryActivity
这个类吗,
在这个函数处理下你想返回的界面,下面是我写的代码。OK,完事!什么?太乱,没看懂,就这样吧,不会写了。
@Override public void onResp(BaseResp resp) { Log.d(TAG, "onPayFinish, errCode = " + resp.errCode); // Toast.makeText(WXPayEntryActivity.this, resp.errCode, Toast.LENGTH_SHORT).show(); // if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) { // AlertDialog.Builder builder = new AlertDialog.Builder(this); // builder.setTitle("提示"); // builder.setMessage("微信支付结果" +String.valueOf(resp.errCode)); // builder.show(); // } if (resp.errCode!=100) { clearyhqcar(); clearcar(); Intent intent=new Intent(WXPayEntryActivity.this,ShopDetailActivity.class); // intent.putExtra("PAYCODE",resp.errCode); startActivity(intent); finish(); } }