微信支付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的步骤,其他就是传参而已。
版权声明:本文为博主原创文章,未经博主允许不得转载。

app集成微信支付服务器端开发(java)

一、微信支付太坑爹,废话不说了,下面是我的服务端微信支付开发过程和代码记录 二、首先去微信申请账户,这里有两个平台  1、微信公众平台 2、微信开放平台(https://open.weixin...
  • liehuzunzhe
  • liehuzunzhe
  • 2015年10月26日 14:38
  • 1923

App微信支付服务端流程

1.  app支付流程 用户点击充值后app调用服务器端统一下单接口,返回预支付订单prepay_id给app端,app用prepay_id调起微信支付接口;app端调起微信支付后微信端后回调统一下...
  • a1056554660
  • a1056554660
  • 2017年06月08日 10:39
  • 486

java版app微信支付服务端代码【手机app微信支付】

老早就像做支付模块的东西,因为觉得很高大上,很早就开始把微信支付模块的重心签名给做好了,一直就缺个商家的key,现在有幸来电商公司,哈哈,果然一切很顺利,能够很给力地App端提供支持; 个人觉得核...
  • xb12369
  • xb12369
  • 2016年01月14日 10:26
  • 15409

iOS&Android集成微信支付-Server篇(PHP)

转自:http://www.qinyejun.com/php/ios-wechatpay-server-php/ 在上一篇文章《iOS集成微信支付-Swift版》中,我介绍了如何在iOS中集成微...
  • iflychenyang
  • iflychenyang
  • 2016年08月01日 15:20
  • 3041

微信支付 APP支付 Java 服务器端

微信支付 APP支付 Java 服务器端 本文介绍微信支付中APP支付-java服务端。 微信APP支付文档:https://pay.weixin.qq.com/wiki/doc/api/app/...
  • poorCoder_
  • poorCoder_
  • 2017年01月13日 11:13
  • 10099

Android微信app支付集成步骤详解

Android微信app支付集成步骤
  • VRoymond
  • VRoymond
  • 2016年12月11日 17:30
  • 1948

安卓app微信支付集成教程(按照步骤走就行)

前段时间项目里面集成银联支付,写了篇心得,现在项目要求集成微信支付,支付宝支付话由于做的是和股票金融类的相关产品,所以审核不通过,那么接下来讲讲我在微信支付里面的步骤和大家该注意的一些坑吧 首先大家...
  • wcsandlili
  • wcsandlili
  • 2016年12月29日 13:53
  • 1395

APP服务端微信支付(PHP服务端)

主要介绍APP微信支付功能,利用PHP作为服务端,快速、简介的搭建APP微信支付功能...
  • u014599700
  • u014599700
  • 2017年09月19日 15:42
  • 445

微信支付服务端开发总结

前言 最近应公司业务需求,把微信支付完成了,当然已经顺利上线。但是开发的过程是也是踩了很多坑,下面我就先说说开发流程,以及在开发中遇到的大大小小的坑。 开发流程 首先,看一下微信...
  • Baple
  • Baple
  • 2017年03月29日 09:09
  • 2202

android 微信支付 + node.js 服务端

实现微信支付有很多方式,至于开始菜鸟的我使用app支付,后期考虑安全性问题,只好把统一下单,得到prepay_id之后再次签名sign全在服务端写了,废话不多说,进入操作。 做任何东西,我喜欢了解整...
  • u010590891
  • u010590891
  • 2016年05月16日 15:58
  • 1210
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:微信支付APP客户端及服务端集成
举报原因:
原因补充:

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