关闭

浅谈安卓微信支付遇到的那些坑(服务端签名)

6318人阅读 评论(4) 收藏 举报
分类:

**

浅谈安卓微信支付遇到的那些坑(服务端签名)

**
做微信支付首先需要到微信开放平台https://open.weixin.qq.com注册自己的APP。
1,如果是创建移动应用就点击创建移动应用,然后安照提示的填写资料。
2,第一页填写完毕后,会跳到填写平台信息页面,(这里会遇到第一个坑,我表示没有遇到)这里有个填写应用签名,注意了,如果项目是在测试阶段,这里填写你的debug.keystore的签名,如果不填写这个到时候测试的时候很麻烦,记得这里填写测试的签名。
3,申请通过后腾讯会给一个AppID,和AppSecret,拿到这个东西之后就可以进行微信支付API的集成了。
4,下面坑来了, 集成微信支付很简单,但是难得地方是文档写的不够清晰,总是会让人掉到坑里面去, 集成微信支付首先到微信开放下载微信支付的DEMOhttps://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1,下载完之后就可以正式移植微信支付API了,这里写图片描述 而真正有用的只有这里写图片描述
5,调用微信支付API ,调用微信支付首先要将自己的APP注册到微信 ,即要调用`

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

然后创建IWXAPI对象,

        IWXAPI api = WXAPIFactory.createWXAPI(this, "wxb4ba3c02aa476ea1");

然后调用微信创建支付订单方法

PayReq req = new PayReq();
                            //req.appId = "wxf8b4f85f3a794e77";  // 测试用appId
                            req.appId= "appid";
                            req.partnerId= "partnerid";
                            req.prepayId= json.getString("prepayid");
                            req.nonceStr= json.getString("noncestr");
                            req.timeStamp= json.getString("timestamp");
                            req.packageValue= json.getString("package");
                            req.sign= json.getString("sign");
                            req.extData= "app data"; // optional

                            // 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
                            api.sendReq(req);

注意:以上参数是通过服务器签名后传递过来的,
6.将如下目录的包拷至自己项目的主目录下面
这里写图片描述
,即 配置文件的package里面的那个目录,这个是重点,而且这个包的名字也不可以改变,必须是wxapi,否则是无法接收到微信支付状态的回调的,调试起来非常的麻烦, 这里面的两个文件WXPayEntryActivity.java是支付状态的回调文件,一定要记住,wxapi包必须是要放在项目的主目录里面,至此微信支付的客户端已经集成完毕。

7.服务端的一个,
(注意服务端会有一个坑),当服务端签名后传递到本地APP后如果无法调起微信支付页面,而且一直返回-1的话,那么看服务端时候拿到了微信给的签名,服务端传过来的参数是否有空值,并且要拿微信的在线参数测试工具测试一下参数是否配置正确,如果正确依然无法支付返回-1的话那么就是服务端没有进行二次签名了,当服务端在第一次向微信请求签名的时候,微信返回的签名值并不是传递给安卓端的签名,服务端拿到签名后要将这个签名拿到第一次向微信签名的参数进行二次签名后传递给安卓端,这才是正确的签名,需要二次签名,至此微信支付完成。

如果调用微信支付并且签名正确依然没有反应的话那么首先检查wxapi的包是否放在项目的主目录下面, 然后检查服务端是否进行二次签名,

还有一个坑,当服务端进行第一次签名时会向微信传递一个BODY参数,这个参数一旦生成签名成功,当支付失败再次进行支付时不可以改变BODY的内容,因为这个正文是不可以改变的,

这就是我做微信遇到的坑,希望对大家有帮助,第一次写文章,写的不好请大家谅解,如果遇到问题可以加我的QQ:847874028 帮助解答,谢谢!

4
0
查看评论

微信注册AppID失败

来自官方文档:要使你的程序启动后微信终端能响应你的程序,必须在代码中向微信终端注册你的id。 官方提供的注册代码://从官网申请的合法AppID private static final String APP_ID = ""; //IWXAPI 是第三方app与微信通信的o...
  • ThOrz
  • ThOrz
  • 2015-04-01 15:54
  • 7057

Android中微信支付的调用方法

商户在微信开放平台申请开发应用后,微信开放平台会生成APP的唯一标识APPID。由于需要保证支付安全,需要在开放平台绑定商户应用包名和应用签名,设置好后才能正常发起支付。本文讲解Android微信支付快速集成案例及有效解决返回值-1。下面我们参考微信官方APP端开发步骤说明,一步一步集成微信支付功能...
  • qq_28963915
  • qq_28963915
  • 2016-05-19 17:44
  • 4308

微信支付踩坑之旅

前言,作为一名有经验的开发人员,竟然被集成微信支付这么一个小小的功能坑的吐血。文档不详细不够规范,Demo可以说是小学生写的吗,而且几年未更新了。。。虽然代码量很少,但是坑实在是多。 一.客户端的坑 在调用IWXAPI对象的registerApp()之前,我们需要先创建IWXAPI对象,...
  • ruancoder
  • ruancoder
  • 2017-01-23 01:14
  • 699

Android利用微信SDK分享到微信教程,回调分享结果错误解决和注意点

在正式开始之前这里要着啰嗦一下,进来的同学一定要看,在申请应用的时候要填一个签名,这个签名是由应用的签名文件keystore决定的,那么你在填这个签名的时候,一定要把你的应用用正式的keyStore生成apk,安装到手机,然后用微信提供的获取应用签名的apk工具获取你应用的签名,然后这会生成的这个签...
  • liuye09043124
  • liuye09043124
  • 2016-07-08 12:04
  • 4442

Android实现微信分享及注意事项

一、获取帮助文档并下载相关资料首先打开微信开放平台:https://open.weixin.qq.com/ 如果没有注册,请先注册并上传开发者资料等待审核。资源中心----移动应用开发----分享与收藏功能----Android开发手册开发手册链接地址:https://open.weixin.qq....
  • lxq_xsyu
  • lxq_xsyu
  • 2014-10-26 18:19
  • 21047

APP调用微信支付接口-服务端二次签名

微信官方实在太坑了,不仅不给demo,还在文档中误导人!!!下面来说说要注意的两个坑 1、在第二次签名时候,官方给出的说法是如图: 要是按照他上面的驼峰原则来进行签名,那你就大错特错了。 记住:这几个字段的“字段名”在参与签名的时候一定都要改成小写!!! 2、还有个坑要注意:不仔细根...
  • sinat_17820239
  • sinat_17820239
  • 2016-05-06 19:56
  • 4706

JAVA微信支付 实现服务端返回预付单号和签名

有些类可能没用到的,看情况删掉,这段代码 我本人测试可用,大家只需要关注核心——怎么将string 类型的xml 参数封装成 entity,并且以 http请求post方式传递给微信服务端,然后使用Dom4j解析返回的XML,再封装成Map! package com.jade.laiding.c...
  • u014535678
  • u014535678
  • 2015-11-06 22:14
  • 4280

android中关于微信支付流程的总结

微信支付
  • baisemaque
  • baisemaque
  • 2016-03-22 09:17
  • 5298

如何集成android微信支付及各种问题(-1,签名错误,无法获得预支付id)的解决办法。

集成微信支付遇到的各种问题
  • gaoqingliang521
  • gaoqingliang521
  • 2017-05-31 16:12
  • 2485

Android微信支付签名错误解决方法

整体流程:1.拼接商品的信息List<NameValuePair> packageParams = new LinkedList<NameValuePair>(); packageParams.add(new BasicNameValuePair(&q...
  • guoh_
  • guoh_
  • 2016-01-25 12:03
  • 9068
    个人资料
    • 访问:6949次
    • 积分:107
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:0篇
    • 译文:0篇
    • 评论:4条
    文章分类
    文章存档
    最新评论