微信支付APP客户端及服务端集成

原创 2016年08月30日 17:42:27

循例介绍项目开发的过程和遇到的问题及其解决办法

有经验的朋友可直接看以下几点,忽略代码:

  1. 首先确认应用的包名签名与应用注册的一致,注意这里的签名是32位的签名,萌新请到官网下载工具测出签名每次测试时务必对自己的App做正式签名,同微信分享一个原理,没签名过是打不开微信界面的,没错,微信就是这么霸道。如果可以分享,支付不行,就不关Apk签名问题。
  2. 微信分享和微信支付SDK是同一个jar包,名为libammsdk.jar。若集成过友盟分享,并包含微信分享,那么恭喜你,项目中libs文件夹必包含SocialSDK_WeiXin_1.jarSocialSDK_WeiXin_2.jar,然后,然后没了,因为这两个jar包已包含开发所需。
  3. APP客户端只会收到返回的错误码errCode对于errCode返回-1,若确认上述两点做到了,那么问题基本在参数sign上面。什么?还可能是APPID不正确?呵呵,这么低级的错误能不说出来吗!其他的6个参数请瞪大眼睛自己检查。以下是生成sign的关键:
生成sign时特别需要注意,首先将key=value键值对拼成字符串,注意key都要小写,如appid、noncestr、package、partnerid、prepayid、timestamp、key,并且名字得按上述名称。有人会因为package是关键字而改变,当然不行,传给客户端的字段可以改变,但生成sign时的字符串   必须用package
还有一个十分关键的key,其并非AppID或AppSectet,而是在商户平台设置的,官方指引为“key设置路径:微信商户平台 (pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置”。正在开发或开发失败=。=的朋友都需要特别注意,官方文档的签名生成算法只举例了生成预支付交易单时的签名生成算法,介绍了需要在key=value键值对拼成的字符串后加上“&key=你的key”,于是很多服务端的程序猿都能访问微信并成功生成预支付交易单,但(重点来了)它们在传给客户端的参数sign却忽略了key,所以无论客户端如何测试都只能收到errCode=-1
还有(别急),服务端的程序猿会发现微信传回来的参数中也包含了一个sign,这里就要普及一下sign的意义:用来判断数据传递过程中是否被第三方篡改,也就是保证数据的正确性。根据微信返回的数据生成一次签名(加上key),然后判断你算出来的sign与微信返回的sign是否一致,一致则表示数据正确,是微信返回的,不一致则不是,这是保证数据安全的措施(个人观点=。=)。看到这里估计很多人会恍然大悟,因为你们都把微信返回的sign直接传给客户端了,我们就是卡在这个问题上(鄙视我们后台,最后还是才高八斗的本人发现的)!正确做法是把传给客户端的6个参数(不包括sign)加上key重新生成sign,把这个sign传给客户端。
4.WXPayEntryActivity这个回调界面实际上不会影响前面的调起支付的逻辑,写过微信分享的应该知道,这个Activity一定要放到“App包名.wxapi”的package中,否则无法响应回调,当然别忘了在AndroidManifest.xml中注册。微信分享的回调WXEntryActivity也是这样的,放在同一个包即可。
至此,需要特别关注的坑都可以填上了,下面是代码。
客户端代码:
@Override
public void onSuccess(String t) {
    super.onSuccess(t);
    JSONObject json = null;
    try {
        json = new JSONObject(t);
        if(null != json && !json.has("retcode") ){
            JSONObject json1 = new JSONObject(json.getString("obj"));
            PayReq req = new PayReq();
            //req.appId = "wxf8b4f85f3a794e77";  // 测试用appId
            req.appId        = json1.getString("appid");
            req.partnerId     = json1.getString("partnerid");
            req.prepayId      = json1.getString("prepayid");
            req.nonceStr      = json1.getString("noncestr");
            req.timeStamp     = json1.getString("timestamp");
            req.packageValue   = json1.getString("packagevalue");
            req.sign         = json1.getString("sign");
            msgApi.registerApp(BaseConfig.WXAPPID);
            msgApi.sendReq(req);
        }else{
            Log.d("PAY_GET", "返回错误"+ json.getString("retmsg"));
            Utils.showToast("返回错误"+ json.getString("retmsg"));
        }
    } catch (JSONException e) {
        Log.e("PAY_GET", "异常:"+ e.getMessage());
        Utils.showToast("异常:"+ e.getMessage());
        e.printStackTrace();
    }
}
服务端代码就不贴了,也就是多了生成sign的步骤,其他就是传参而已。
版权声明:本文为博主原创文章,未经博主允许不得转载。

仿陌陌的ios客户端+服务端源码

软件功能:模仿陌陌客户端,功能很相似,注册、登陆、上传照片、浏览照片、浏览查找附近会员、关注、取消关注、聊天、语音和文字聊天,还有拼车和搭车的功能,支持微博分享和查找好友。 后台是php+mys...

全部开源!仿微信仿陌陌类APP整项目开源,客户端+服务端

说背景:本来是2014年做的产品,一直没上线,安安静静的睡在本“程序猿”的硬盘上,介于在市场上有看到了很多开源类云通讯,诸如“环信、融云”之类的第三方产品,都不开放更多的后端数据,乐聊为大家提供了一整...

封装好的Android 微信支付

版权声明:本文为博主原创文章,未经博主允许不得转载。你的打赏是我最大的幸运 一、 微信官方的集成文档 微信官方资源下载二、代码需要导入的包:libammsdk.jar支付后的返回结果pack...

Android 微信支付总结

由于公司运营需要,Android客户端要增加微信支付。在看了几遍官方文档之后,加上之前有集成微信分享的经验,所以很快就把调用微信支付的代码写好了,待微信支付相关接口完成后联调时,才发现山高路远坑深啊!...

微信支付——调用微信客户端支付之【服务端】开发详解

之前一篇提到微信支付的开发过程,写得有点乱,现在重新整理一下。 好了,说说到底该怎样一步一步分享处理。 解压从官网下载下来的开发说明文档(下载地址:https://mp.weixin.qq.com...
  • Seven_cm
  • Seven_cm
  • 2014年11月28日 00:22
  • 198571

微信支付——调用微信客户端支付之【服务端】开发详解

之前一篇提到微信支付的开发过程,写得有点乱,现在重新整理一下。 好了,说说到底该怎样一步一步分享处理。 解压从官网下载下来的开发说明文档(下载地址:https://mp.wei...

微信支付——调用微信客户端支付之【服务端】开发详解

最近准备上网页的微信支付,大家可以参考后续教程: http://blog.csdn.net/seven_cm/article/details/50019927 2015-0...

微信app支付java服务端源码

  • 2017年11月07日 10:52
  • 191KB
  • 下载

svn服务端客户端集成到eclipse中步骤

SVN服务器端、客户端安装以及集成到eclipse的详细步骤     以下每一步都是本人(steve_wang_victor)亲自操作后写下的,有什么不对的,还请阁下指出。  ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:微信支付APP客户端及服务端集成
举报原因:
原因补充:

(最多只允许输入30个字)