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