阅读更多

3顶
0踩

行业应用

       今天来写点什么,就写微信支付吧。哥可是被微信支付接口给折腾惨了。

       大概从5月22好开始,进行微信开发,到现在也有个吧月了,老总要求3个月拿出微信会员系统,感觉有点悬,这两天又被微信支付给卡住了。

        为了童鞋们能少走弯路,特此公告天下,哪位童鞋微信支付遇到了问题,尽管留言。下面谈谈自己的被坑爹的过程。

        1.要使用微信支付,前提是开通微信支付功能(废话!),开通后,就可以拿到商户id和商户api密钥,有了这两个必须的东西,就可以调用微信统一支付接口,拿到微信预支付prepayid了.有了prepayid,就可以在网页中调用jsapi了。

        2.重点是怎么拿到prepayid呢?很简单,调用post请求道https://api.mch.weixin.qq.com/pay/unifiedorder地址就可以了,很简单吧。咋一看确实简单,但这里面隐藏了好几个坑。网上一搜,坑一大把,我就把我遇到的两个坑show一下好了

        3.要拿到peipayid,需要传递一组xml数据,对应java攻城狮来说,一般都会写个model,填充数据,然后将model转换为xml字符串,然后跟随post请求一起发送出去。

        4.在一组xml数据中,有一个签名,初次遇到的人肯定都会蒙。这个签名要怎么签呢,要把你所有要传递给服务器的数据进行处理。记住:是所有要传递给服务器(腾讯)的数据,除了sign这个数据外的所有数据。sign也要被传送到服务器端去。

        一般是这样的:

               private String appid;// 公众账号ID
               private String mch_id;// 商户号
               private String device_info;// 设备号
               private String nonce_str;// 随机字符串
               private String sign;// 签名
               private String body;// 商品描述
               private String detail;// 商品详情
               private String attach;// 附加数据

               ... ...

          将这些字段先进行排序,字典排序,直接调用Arrays.sort(String[]);这样就排序完了,然后再拼接成一个字符串,appid=123&mch_id=123......以此类推,最后在加上商品api密钥key=123.完了之后,进行md5转换,在这,我被坑了一把。

          原因很简单,我转换后的md5有时候是29位,而不是32位,这是因为我在讲md5二进制字节流转换为字符串的时候,没有处理字节中小于16的值。也就是应该在小于16的值前面加0,不加的话,md5的结果位数就不对

         5,我遇到的下一个坑,也很简单,但折腾了我很久。我将创建好的model转换为xml,使用的是以下代码:XStream xStream = new XStream();
        xStream.alias("xml", object.getClass());

         转换结果如下:

         

 <appid>xxxxxxxxxxxxx</appid>
  <mch__id>xxxxxxxxxxxx</mch__id>
  <nonce__str>1add1a30ac87aa2db72f57a2375d8fec</nonce__str>
  <sign>C939DCA5210FEDF5C9651412C966EA01</sign>
  <body>test</body>
  <out__trade__no>1ad41a30ac87aa2db72f57a2375d8fec</out__trade__no>
  <total__fee>1</total__fee>
  <spbill__create__ip>xxx.xx.xx.xx</spbill__create__ip>
  <notify__url>xxxxxxxxxxxxxxxx</notify__url>
  <trade__type>JSAPI</trade__type>
  <openid>xxxxxxxxxxx</openid>
</xml>
     乍一看,这是没有问题的,其实应该是这样的:
     <xml><appid><![CDATA[xxxxxxxxxxx]]></appid><mch_id><![CDATA[xxxxxxxxxx]]></mch_id><nonce_str><![CDATA[1add1a30ac87aa2db72f57a2375d8fec]]></nonce_str></xml>
       也就是说:只要是字符串,就得用<![CDATA[   ]]>包裹起来,整型数据不用包裹,没有其他型号的数据了,哈哈哈哈。
        很晚了,该睡觉了,祝各位攻城狮晚安
3
0
评论 共 7 条 请登录后发表评论
7 楼 arantam 2016-11-30 15:44
我也遇到这个情况,很奇怪:
在微信的加解密测试工具页面测试是没问题的,sign校验通过
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=20_1

但启动服务穿测的时候,微信统一下单接口返回:
<xml><return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[签名失败]]></return_msg>
</xml>

大家有遇到过嘛?怎么解决的?
6 楼 wst0350 2015-12-09 10:03
学习了,感谢分享
5 楼 1036225283 2015-07-09 11:36
atfire 写道
微信公众号支付,已成功通过统一下单接口下单,但是网页端调起支付API返回get_brand_wcpay_request:fail,请问一般是什么问题


你是在公众号里面调用的吗。我qq1036225283

4 楼 1036225283 2015-07-09 11:35
你是在公众号里面调用吗
3 楼 atfire 2015-07-09 10:18
1036225283 写道
atfire 写道
微信公众号支付,已成功通过统一下单接口下单,但是网页端调起支付API返回get_brand_wcpay_request:fail,请问一般是什么问题



你说的这个错误,我没遇到过,现在解决了吗,我使用的是最新的支付版本

还没有解决,网上都说起调支付简单,我就是死在这个上面,折腾死我了
2 楼 1036225283 2015-07-08 16:31
atfire 写道
微信公众号支付,已成功通过统一下单接口下单,但是网页端调起支付API返回get_brand_wcpay_request:fail,请问一般是什么问题



你说的这个错误,我没遇到过,现在解决了吗,我使用的是最新的支付版本
1 楼 atfire 2015-07-07 16:46
微信公众号支付,已成功通过统一下单接口下单,但是网页端调起支付API返回get_brand_wcpay_request:fail,请问一般是什么问题

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 服务器中调试微信支付免预充,微信支付-统一支付接口被坑经历

    哥可是被微信支付接口给折腾惨了。大概从5月22好开始,进行微信开发,到现在也有个吧月了,老总要求3个月拿出微信会员系统,感觉有点悬,这两天又被微信支付给卡住了。为了童鞋们能少走弯路,特此公告天下,哪位童鞋...

  • 微信统一下单 java_微信支付之统一下单--JAVA版

    都说微信支付有些坑,都抱怨微信支付的文档太烂,一会APPId,一会商户id,还有appsecret,支付API秘钥让你傻傻分不清楚,还有这里大写那里小写,几种标准,让你眼花缭乱。没错,这就是很多技术团队都存在的问题,...

  • 微信支付全流程实现--踩过的坑

    第一步:微信授权,获取code值 点击 “立即支付” 进行微信授权操作: 使用GET请求方式,请求后端提供的...请求微信授权接口后,后端会把页面重定向到支付页面,并在路径中携带我们需要的code值; getAuthCode...

  • 微信App 支付 PHP后台接口代码

    经历了上述5坑,相信你已经有想干死人的冲动,那么你以为这就结束了吗,还有最后一坑,那就是APP签名已经包名,一定要与开放平台中的一致,然而,即使一致了你以为又结束了吗,NO,如果你更改过开放平台中的签名,...

  • Android集成微信支付遇到的问题 完美解决errorcode返回-1的情况

    最近项目在做支付板块 支付主要用到支付宝和微信支付 支付宝支付这里就不多说了 很简单 按照官方demo套就可以了 30分钟解决支付宝支付 这里重点说一下微信支付 和遇到的问题 并如何解决的问题过程 gif图 问题 在...

  • android通过webview调起微信app支付--h5部分实践

    步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。参见【统一下单API】。 步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appid,partnerid,...

  • 微信支付 postman_小刘同学微信支付接入全笔记

    不过,每个人所处的公司不同,所面对的业务不同,大家逐渐都开始有了自己所擅长处理的业务类型,我也不例外,在经历了疫情期间的跳槽之后,我又开始涉足一个全新的业务领域,而我面对的第一个挑战就是---支付!...

  • 微信支付示例代码,预支付接口和支付结果通知接口完整示例

    对接微信支付功能,总结一下, 写一篇详细的博客,提供大家作为参考,示例代码获取 一、流程概述 这里是微信支付APP版的支付流程概述 图片取自微信支付官方文档, ... 微信支付调用服务端的通知接口, 告诉服...

  • 快速开发微信小程序之二-微信支付

    在面试程序员的时候,有两项经历会带来比较大的加分,第一你是否做过支付金融相关的业务,第二你是否写过底层框架中间件代码,今天我们聊一下微信支付是如何对接的。要使用微信支付,第一步就是要先入驻微信商户平台...

  • 一小时搞定c#微信支付

    微信jsapi支付 .net环境示例

  • 从 微信 JS-SDK 认识 JSBridge

    前言前段时间由于要实现 H5 移动端拉取微信卡包并同步卡包数据的功能,于是在项目中引入了 微信 JS-SDK(jweixin)[1] 相关包实现功能,但也由此让我对其产生了好奇心,于是打算好好了解下相关的内容,通过查阅相关...

  • 浅析微信支付:前篇大纲

    以下会分几个步骤讲一下我学习微信支付的过程,也是一部辛酸史,也是希望朋友们不要再次跌进坑里,节省时间。 1、公司需要 如标题一般,公司来了这么个需求,需要接入微信支付,那就必须搞定他了,相信大部分的小...

  • 手撕微信H5支付遇到的坑

    最近“手撕”一词很火,加上最近在做微信H5支付遇到各种坑,故以此为题,书写微信支付的坑,预祝后来同仁饶坑而行,或者早日出坑。一、准备工作 1.申请各种appid:本人项目中遇到的场景是在《app端》的《H5》中...

  • 微信支付遇到的坑!!!!!

     不多说,我只是写在这里写着玩,列举一下微信支付的坑:1. 调用统一支付接口时 ,body(商品描述)传中文可能会报错,编码设置后也一样。支付宝也有,字段 subject(商品标题),为中文会报错。2. 统一支付接口...

  • 【来C站:一起聊java】用java实现微信支付功能的详细设计思路

    由于上一个项目的小程序支付模块的历练,让我意识到支付确实是一个复杂且测试起来需要的配置特别复杂的模块,这么说吧,学生想要实打实的测试微信支付太难了,它需要你有企业的相关证明,营业执照呀,公众号商户号,...

  • setting.xml文件,修改Maven仓库指向至阿里仓

    setting.xml文件,修改Maven仓库指向至阿里仓

  • 基于java的玉安农副产品销售系统的开题报告.docx

    基于java的玉安农副产品销售系统的开题报告

  • dev-c++ 6.3版本

    dev-c++ 6.3版本

  • 基于java的项目监管系统开题报告.docx

    基于java的项目监管系统开题报告

Global site tag (gtag.js) - Google Analytics