微信支付接入流程

微信支付是需要签名的,跟支付宝一样,可以在客户端签名,也可以在后台签名(当然,为了安全还是推荐在服务器上做签名,逻辑也比较好理解)

时序图:


统一下单API、支付结果通知API和查询订单API等都涉及签名过程,调用都必须在商户服务器端完成。

商户系统和微信支付系统主要交互说明:

  • 1. 用户在商户APP中选择商品,提交订单,选择微信支付。

  • 2. 商户后台收到用户支付单,调用微信支付统一下单接口。

  • 3. 统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appid,partnerid,prepayid,noncestr,timestamp,package。

  • 4. 商户APP调起微信支付。

  • 5. 商户后台接收支付通知。

  • 6. 商户后台查询支付结果。

商户在微信开放平台申请开发应用后,微信开放平台会生成APP的唯一标识APPID。由于需要保证支付安全,需要在开放平台绑定商户应用包名和应用签名,设置好后才能正常发起支付。设置界面在【开放平台】中的栏目【管理中心 / 修改应用 / 修改开发信息】里面。

应用签名:根据项目的应用包名和编译使用的keystore,可由签名工具生成一个32位的md5串,在调试的手机上安装签名工具后,运行可生成应用签名串

参照微信SDK Sample,在net.sourceforge.simcpux.wxapi包路径中实现WXPayEntryActivity类(包名或类名不一致会造成无法回调),在WXPayEntryActivity类中实现onResp函数,支付完成后,微信APP会返回到商户APP并回调onResp函数,开发者需要在该函数中接收通知,判断返回错误码,如果支付成功则去后台查询支付结果再展示用户实际支付结果。注意一定不能以客户端返回作为用户支付的结果,应以服务器端的接收的支付通知或查询API返回的结果为准。(net.sourceforge.simcpux为你的项目包名)代码示例如下:

 

   @Override
   public void onResp(BaseResp resp)
{
       Log.d(TAG,"onPayFinish,errCode="+resp.errCode);
       // 判断resultStatus 为“0”则代表支付成功,具体状态码代表含义可参考接口文档
       if (resp.errCode.equals("0")) {
           Toast.makeText(ThirdActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
       }else if (resp.errCode.equals("-1")){
           // -1为支付失败,包括用户主动取消支付,或者系统返回的错误
           Toast.makeText(ThirdActivity.this, "支付失败", Toast.LENGTH_SHORT).show();
       }else if (resp.errCode.equals("-2")){
           // -2为取消支付,或者系统返回的错误
           Toast.makeText(ThirdActivity.this, "取消支付", Toast.LENGTH_SHORT).show();
       }else {
           // 其他为系统返回的错误
           Toast.makeText(ThirdActivity.this, "支付错误", Toast.LENGTH_SHORT).show();
       }
   }

以下三种为常用结果判断

0为支付成功
-1为支付失败
-2为取消支付



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值