Android微信支付 遇到的问题

作者: sirai | 来源:发表于2016-09-21 16:53 被阅读3164次
    当你的应用已经到这个界面的时候 ok 你就要成功了.png
    搜索到这篇文章的想必都是在调试微信支付,
    身为一个做过两次app 微信支付的人员,我遇到的问题有服务的,客户端的,
    ok 接下来慢慢介绍问题,当然了文章最底部也有开发前准备
    ![L{D42G]TUR~UTPZ}56XX`_C.gif](http:https://img.haomeiwen.com/i2516867/90fcc9e28f650877.gif?imageMogr2/auto-orient/strip)
    **问题 -1(微信支付竟然所有的错误都是-1) **
    • 后台的问题:调用微信统一下单API、以及返回数据给前端时候的sign问题 参数二次签名的时候 必须是小写,小写,小写

      (1).调用统一下单时候的商户key 微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置
      (2).调用统一下单API后,按照微信文档中的业务流程,下一步该是:

    统一下单接口返回正常的prepay_id,
    再按签名规范重新生成签名后,将数据传输给APP。
    参与签名的字段名为appId,partnerId
    ,prepayId,nonceStr,timeStamp,package。
    
    
    • 从这开始就是app的注意事项检查appid 是否注册
      (1).配置文件xml注册
      <!-- wxpay-->
            <activity
                android:name=".wxapi.WXPayEntryActivity"
                android:exported="true"
                android:launchMode="singleTop"
                >
            </activity>
    
            <receiver android:name=".wxapi.AppRegister"
                android:permission="com.tencent.mm.plugin.permission.SEND">
                <intent-filter>
                    <action android:name="com.tencent.mm.plugin.openapi.Intent.ACTION_REFRESH_WXAPP" />
                </intent-filter>
            </receiver>
    

    (2).AppRegister

    public class AppRegister extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            final IWXAPI api = WXAPIFactory.createWXAPI(context, null);
            api.registerApp(Constants.APP_ID);
        }
    }
    

    (3).调起微信支付时候也需要注册 应该是双重保障吧

     msgApi = WXAPIFactory.createWXAPI(getActivity(),null);
            msgApi.registerApp(Constants.APP_ID);
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    /** 检测是否有微信软件 */
                    if (isWXAppInstalledAndSupported(msgApi)) {
                        PayReq request = new PayReq();
                        request.appId = vo.getAppid();
                        request.partnerId = vo.getPartnerid();
                        request.prepayId = vo.getPrepayid();
                        request.nonceStr =vo.getNoncestr();
                        request.timeStamp = vo.getTimestamp();
                        request.packageValue = "Sign=WXPay";
                        request.sign =vo.getSign();
                        msgApi.sendReq(request);
                    } else {
                        MessageBox.toast(getActivity(),"亲,您还没有安装微信");
                    }
                }
            });
    
    • 检查你的应用签名是否正确 具体的做法就是下载官方的工具 将你的app 正常打包运行到手机上 检测一下下边两张照片里标注的 值是否正确
    输入应用的包名,会获取到签名.png 开放平台应用的配置签名.png

    其实你会清楚的发现这个值和正常打包之后的md5类似 只不过就是改成小写去掉冒号

    MD5: 92:5A:6E:58:CF:45:B5:2C:7B:23:BB:75:96:E3:9D:C0
    
    • 检查你微信回调的WXPayEntryActivity 是不是在你根目录+wxapi的包下 根目录-》就是你配置文件里的package 一定要匹配 否则不走你的回调 还有就是回调的activity必需命名为WXPayEntryActivity
    根目录+wxapi.png mainifest.xml文件.png

    开发前的准备
    安卓sdk下载
    https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1
    微信开放平台
    https://open.weixin.qq.com/
    微信android开发手册
    https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317784&token=&lang=zh_CN
    微信app开发步骤
    https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5

    相关文章

      网友评论

      • hyz撸代码:楼主,有没有demo啊?
      • 5dabb448cbaf:AppRegister这个东西应该不会被调用吧, 官方demo很吭
      • Cliper:后台的问题:调用微信统一下单API、以及返回数据给前端时候的sign问题 参数二次签名的时候 必须是小写,小写,小写?最终req(签名是小写)啊?
      • 丸_子:欢迎技术交流QQ群:104286694
      • ov灬飞:赞一个

      本文标题:Android微信支付 遇到的问题

      本文链接:https://www.haomeiwen.com/subject/wiyaettx.html