当前位置:首页 > 开发 > 行业应用 > 正文

微信支付--统一支付接口被坑经历

发表于: 2015-06-10   作者:1036225283   来源:转载   浏览:
摘要:        今天来写点什么,就写微信支付吧。哥可是被微信支付接口给折腾惨了。        大概从5月22好开始,进行微信开发,到现在也有个吧月了,老总要求3个月拿出微信会员系统,感觉有点悬,这两天又被微信支付给卡住了。     &n

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

       大概从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[   ]]>包裹起来,整型数据不用包裹,没有其他型号的数据了,哈哈哈哈。
        很晚了,该睡觉了,祝各位攻城狮晚安

微信支付--统一支付接口被坑经历

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
业务需要一个在微信上能付款的功能,于是乎想到了最普遍的支付宝,坑爹的是T与A是水火不容啊,默默
研究微信开发一年多了,每个新接口,都会第一时间进行研究。微信支付开放很久,一直没机会接触到支
姗姗来迟的Magento微信支付接口插件 半年之前,有朋友网站需要接入微信支付,是Magento站,于是花费
微信官方今日宣布,微信支付接口即日起向已通过认证的服务号开放。通过调用微信支付,服务号可为用
微信支付已经做完了,没接触过微信的我,经历了非常艰难的3天,才把微信支付给做出来,对于专业的人
据上次 到处都是坑的微信支付V3 后很多园友在被虐了千百遍后终于跳转到了亲切的微信支付界面,但输
前段时间帮一个朋友的基于ecshop开发的商城加入微信扫描支付功能,本以为是很简单的事儿——下载官
最近开始弄支付这块,先是支付宝手机网站支付,也是坑了我许久,不过还好,问题不大。 让我们看看微
   最近一个项目要增加微信支付的功能,想来这个东西出来这么久了,按微信提供的应该可以很快搞定
//来源:http://www.cnblogs.com/ancms/p/4571567.html 微信支付官方.net版之坑你没商量 最近开始弄
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号