Android 微信支付接入,返回出现-1问题

去年有个项目开发当时有接入微信支付的经验,过程比较顺利,一次就调通了,中间并没出什么问题,

但这次就没上次那么 '运气' 了,说实话微信支付接起来很快,结果调试的时候返回 ErrCode容易

出现-1情况,来看完整的微信接入及支付过程。


微信支付效果图(微信Demo):

步骤1:   用户进入商户APP,选择商品下单、确认购买,进入支付环节。商户服务后台生成支付订单,签名后将数据传输到APP端。

步骤2:  用户点击后发起支付操作,进入到微信界面,调起微信支付,出现确认支付界面。

步骤3:  用户确认收款方和金额,点击立即支付后出现输入密码界面,可选择零钱或银行卡支付。


Android 微信支付接入,返回出现-1问题_第1张图片

步骤4:  输入正确密码后,支付完成,用户端微信出现支付详情页面。

步骤5:  回跳到商户APP中,商户APP根据支付结果个性化展示订单处理结果。

Android 微信支付接入,返回出现-1问题_第2张图片



微信支付接入步骤
1,  后台设置,参考微信支付API,商户在微信开放平台申请开发应用后,微信开放平台会生成APP的唯一标识APPID。

由于需要保证支付安全,需要在开放平台绑定商户应用包名和应用签名,设置好后才能正常发起支付。设置界面

在【开放平台】中的栏目【管理中心 / 修改应用 / 修改开发信息】里面。


Android 微信支付接入,返回出现-1问题_第3张图片


应用包名:是在APP项目配置文件AndroidManifest.xml中声明的package值,例如DEMO中的package="net.sourceforge.simcpux"。

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

运行后输入你正式签名过的包名, 如:net.sourceforge.simcpux ,如图所示,绿色串即应用签名。签名工具下载地址https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk


Android 微信支付接入,返回出现-1问题_第4张图片


2,把 libammsdk.jar 考到工程 libs下面,eclipse , studio 都一样.


3,  配置 WXPayEntryActivity,  AndroidMainfest权限等:

  ⑴:在AndroidMainfest.xml找到 package,在自己的工程包名后面创建一个.wxapi的包,把微信Demo的 WXPayEntryActivity 拷贝
并放在.wxapi下,wx_pay_result.xml 放在layout下即可。

  ⑵:配置权限等信息:


   
   
  
 
 
 
  
      
      
         
         
         
         
      
 

4,微信Api调用支付请求配置,这一步先从服务器后台生成微信支付订单后,返回过来并在客户端调用,WechatPayData就是
我自己服务器返回的订单参数:

     
     //微信支付初始化
     PayReq req = new PayReq();
     IWXAPI msgApi = WXAPIFactory.createWXAPI(mActivity, null);
     //支付订单参数赋值
     req.appId = wechatPayData.getAppid();
     req.partnerId = wechatPayData.getPartnerid();
     req.prepayId = wechatPayData.getPrepayid();
     req.packageValue = wechatPayData.getPackageValue();
     req.nonceStr = wechatPayData.getNoncestr();
     req.timeStamp = wechatPayData.getTimestamp();
     req.sign = wechatPayData.getSign();
     //调起支付
     msgApi.sendReq(req);

5,支付成功或失败后,会在WXPayEntryActivity 里有个叫onResp方法,结果就通过该方法返回:
   
   @Override
   public void onResp(BaseResp resp) {
        Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);
        if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
            if(String.valueOf(resp.errCode).equals("0")){
                result_textview.setText("微信支付成功");
            }else if(String.valueOf(resp.errCode).equals("-1")){
                result_textview.setText("微信支付失败");
            }else if(String.valueOf(resp.errCode).equals("-2")){
                result_textview.setText("微信支付取消");
            }
        }
    }

errCode:  

          0 :   支付成功

          1 :   参数错误

          2 :   签名不正确

         -1 :   支付失败

         -2 :   取消支付



整个支付流程就这样,过程简单,现在我们来说说errCode返回 -1情况:

问题1: 
        签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。

问题2: 

        自己服务器后台生成的订单有问题,参数名必须小写,服务器订单参数顺序最好一致,参数多加了或者少加了,订单参数都会

造成签名失败 , 最好把服务器订单参数在该地址测下,看是不是签名出现的问题,地址:https://pay.weixin.qq.com/wiki/tools/signverify/


Ps: 这次代价有点惨痛,在问题一上面耗了点时间,各种换libammsdk.jar,查看keystore签名等,最后花了一天时间才搞定-1问题,

我的问题就出现在问题2 , 就是订单多加了一个参数,android段是不需要的,造成签名失败了,奇怪的是 IOS支付没问题,开始以为

订单是没问题的,导致我影响了判断,最后发现原来是订单多加了一个参数造成的-1失败。





你可能感兴趣的:(android,开发)