• Android项目实战(五十):微信支付 坑总结


    大部分APP必备需求,使用总结 

    Android接入文章在此:官方文档  

    文档很简单,Android分为四步:

    1、后台配置

    2、Android 内 注册appId

    3、Android 内 调起支付

    4、Android 内 支付结果回调

    详细流程总结:

    1、后台配置

       这个让服务器同事去做就行,记得把项目APP的包名和签名文件给他

       包名在app目录下的build.gradle文件中可以查看,为applicationId 键的值

       

      签名就用微信官方给的签名工具获取

      

      注:有文章说这个工具获取的签名是错误的,经测试是正确的,所以放心用。

    2、Android 内 注册appId

       这个比较简单,就是两行代码 , 放在发起支付的那个activity的onCreate里面注册即可

    final IWXAPI msgApi = WXAPIFactory.createWXAPI(context, null);
    // 将该app注册到微信
    msgApi.registerApp("wxxxxxxxxxxx8f4f");

      注:有文章说createWXAPI(content,null) 写成 createWXAPI(content,false)

      实际上第二个参数null或者false都没关系,检测办法就是看一下msgApi.registerApp返回是不是true ,经测试,都为true

    3、Android 内 调起支付

    IWXAPI api;
    PayReq request = new PayReq();
    request.appId = "wxdxxxf4f";
    request.partnerId = "1900000109";
    request.prepayId= "11010x1x1x1x1x1fc314aa427",;
    request.packageValue = "Sign=WXPay";
    request.nonceStr= "110100x1x1x1x11x476f8896f4c9";
    request.timeStamp= "1398746574";
    request.sign= "7FFECB6x1x1x1x1x1x1xx8BC2811827B";
    api.sendReq(request);

     操作一般为:

     客户端发送订单数据给服务器, 服务器进行处理之后,返回微信支付需要的这几个参数,客户端用这几个参数调起支付

     这个就是调起支付的操作,执行sendReq之后即可。

        注意:最好数据都由服务器返回,尽量不要在客户端写死。

     

    4、Android 内 支付结果回调

       涉及一个Activity名为WXPayEntryActivity

       这个Activity可以从官方下载的demo中获取:地址

      

      注意:

      1、需要将这个Activity放到自己的项目中,放置的位置为包名.wxapi.WXPayEntryActivity.java

            加入你的包名为com.aaa.wx  ,则在目录com-aaa-wx下有一个wxapi的包 包里为这个WXPayEntryActivity文件

          结果目录就为:com.aaa.wx.wxapi.WXPayEntryActivity  

        这个位置一定要写对,否则调起支付调不出支付窗口

      2、将WXPayEntryActivity放到自己的项目中的时候,需要在AndroidManifest.xml中注册一下

        

       有文章说要写<intent-filter></intent-filter> , 经测试 现在的版本不需要也是可以的,跟调起支付失败没有关系

    以上四步实现,正常来说就可以实现支付功能了,

    支付结果从WXPayEntryActivity中的onResp方法中回调

    publicvoidonResp(BaseRespresp){
          if(resp.getType()==ConstantsAPI.COMMAND_PAY_BY_WX){
              Log.d(TAG,"onPayFinish,errCode="+resp.errCode);
              AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
              builder.setTitle(R.string.app_tip);
          }
    }

    --------------------------------------------------------------------微信支付排坑总结------------------------------------------------------------------------ 

     1、签名

        后台配置的签名要为release包的签名

      客户端检查的时候,需要打成release包,注意直接编译的debug包是没有签名的,所以会调取失败。

      检查方法:获取已经集成好微信支付的app(测试微信支付的app)的签名(用官方的签名获取app),和后台配置的对比,不一致导致支付调起失败。

    2、WXPayEntryActivity

       这个Activity从官方demo中获取,放到自己的项目中,放置的位置必须为你的包名.wxapi下 , 具体查看上面集成第四步

       AndroidManifest.xml文件需要注册这个WXPayEntryActivity

    3、包名

       检查项目包名和后台配置的包名是否一致

    4、PayReq 对象参数错误

       服务器原因,导致返回的PayReq对象需要的参数出现问题,导致调起支付失败

      检测办法,对比iOS端,如果iOS也不可以发起支付,极有可能是服务器的问题,如果iOS端可以发起支付,则仍为客户端集成问题

    5、微信客户端端缓存

       当你反复检查代码就是认为没有问题的时候,极有可能是微信缓存的问题。

       去手机设置---应用管理---微信---清除数据/缓存

        再发起支付就可以正常发起支付了。 

     (该问题一般是一开始代码有问题,调起支付失败,这时候微信账号上有订单缓存,然后你修改代码之后,代码正确了,仍然调起支付失败,就时这个订单缓存导致的)

     注意:

     打印WXPayEntryActivity的onResp方法的resp.errCode

     如果没有打印,说明可能是上述第二个和第四个问题

     如果打印值为-1 , 异常错误,则考虑为 第1 、 3  、5个问题

     

  • 相关阅读:
    算法打基础——符号&递归解法
    算法打基础——算法基本分析
    最小生成树——Kruskal算法
    最小生成树——Prim算法
    物理DG主备库切换时遇到ORA-16139: media recovery required错误
    Dataguard 主库与备库的Service_Name 不一致时,如何配置客户端TNSName
    oracle 11g RAC 在Windows 7下安装
    关于存储大小的计量单位
    老家的亲戚关系
    Unity3D学习笔记——NGUI之UIInput
  • 原文地址:https://www.cnblogs.com/xqxacm/p/9558735.html
Copyright © 2020-2023  润新知