Android使用微信支付SDK的集成和支付结果的回调问题。

微信支付的事例代码下载链接:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1

下载下来是一个eclipse工程,导入eclipse中会报错,估计是jar包依赖问题,我使用的AS,所以我也没有去管它,只是看了一下代码。使用AS直接用build依赖导入就行了。

示例代码中有一个支付订单的对象:

PayReq req = new PayReq();

按照他的属性把相关的订单属性赋值就OK了

req.appId = json.getString("appid");
req.partnerId = json.getString("partnerid");
req.prepayId = json.getString("prepayid");

req.nonceStr = json.getString("noncestr");

req.timeStamp = json.getString("timestamp");

req.packageValue = json.getString("package");

req.sign = json.getString("sign");

req.extData = "app data"; // optional

有个要求:在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信

注册方法很简单:

商户APP工程中引入微信JAR包,调用API前,需要先向微信注册您的APPID,代码如下:

final IWXAPI msgApi = WXAPIFactory.createWXAPI(context, “wxd930ea5d5a258f4f”);

// 将该app注册到微信

msgApi.registerApp("wxd930ea5d5a258f4f");

这里我写到了自己的Application里面。

然后发起支付:msgApi.sendReq(req);

关于支付结果回调微信要求要有一包名为wxapi,然后里面有一个WXPayEntryActivity界面,因为从微信支付页面返回APP,它会主动跳转这个界面并返回结果(很扯淡)。微信文档中也有一个提示:支付完成后,微信APP会返回到商户APP并回调onResp函数,开发者需要在该函数中接收通知,判断返回错误码,如果支付成功则去后台查询支付结果再展示用户实际支付结果。注意一定不能以客户端返回作为用户支付的结果,应以服务器端的接收的支付通知或查询API返回的结果为准。

就是说客户端返回的结果仅供参考,那用户取消支付应该是准确的,明明取消支付,在充值页面弹窗提示一下就OK了,但是还是要跳回调页面。若果说把支付页面直接写到WXPayEntryActivity这个界面也可以,但是APP不只有一个支付页面怎么搞?和支付宝支付也不统一是吧。

我是在回调方法中这样写的:

@Override
   public void onResp(BaseResp resp) {
//    Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);

      if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
         Intent intent = new Intent();
         intent.setClass(WXPayEntryActivity.this,mAppContext.getActivity().getClass());
         intent.putExtra("resp",resp.errCode);
         startActivity(intent);
         finish();
      } else {
         finish();
      }
   }

其中mAppContext是我定义的Application,通过getActivity可以知道是哪个界面支付的,然后通过获取到的结果直接跳转到充值页面,在充值页面通过onNewIntent来获取显示支付结果。有个问题是,支付完以后会闪一下。

最好的办法当然是不写WXPayEntryActivity这个界面,就是说不获取微信客户端返回结果,每次返回到APP,也就是支付页面,都去向后台询问支付结果,因为后台能获取到微信的支付通知。问题就是后台能不能及时的返回了。这也体现了使用Ping++的好处,许多的支付方式都能统一起来,方便开发!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值