Android微信支付爬坑

yo4520 8年前
   <p><strong>前言:</strong></p>    <p>微信用户越来越庞大,微信支付已经慢慢成为人们购买东西时,不可缺少的一个环节。本文是由 ywl5320授权本公众号独家发布, ywl5320的blog链接:http://blog.csdn.net/ywl5320/。话不多说,看正文</p>    <p>最近在做支付模块,最常用的就是 微信 支付和支付宝支付,其中最坑的就是微信支付了!!各种问题,官方文档也写得不详细。。。哎 不过最后还是成功的爬坑完成集成了微信支付。先附上一张支付成功的页面高兴高兴 哈哈哈:</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/c8f85969e28cf09171d3676f1b7101eb.png"></p>    <p>下面就是爬坑过程</p>    <p>微信支付分为以下几个步骤:</p>    <p>1、首先要在微信开放平台注册,添加自己的APP并成功申请支付功能</p>    <p>2、下载微信支付的SDK并添加到自己的项目里(以上都是最基本的,问题不大)</p>    <p>3、现在就可以着手集成微信支付了(从下单到支付):</p>    <p>(1):准备好需要的资料数据,并向微信注册当前APP</p>    <p>首先要在微信后台配置当前APP打包key所生成的签名(微信官网有签名工具),然后还必须设置商户的key(32位,商户自己设置的),然后就是APP_ID这个是微信为每一个APP生成的,最后就是开通了支付功能的商户的ID用户我们把钱支付给商家。</p>    <p>然后在适当的地方注册APP(oncreate中)</p>    <p>(2):调用统一下单接口(https://api.mch.weixin.qq.com/pay/unifiedorder)生成订单,这一步是最容易出错的(此乃大坑)。</p>    <p>1、首先我们设计好所要传给微信的必要参数(OrderPayBean):</p>    <p><img src="https://simg.open-open.com/show/8a6b6bc3e6cde883249ce5895d29fafe.jpg"></p>    <p>例如以下商品数据:</p>    <p><img src="https://simg.open-open.com/show/45b5b375f4eba067f2a61ded8718adf2.jpg"></p>    <p>2、商品参数准备好了,接下来我们为之生成签名:</p>    <p>签名 算法 如下:</p>    <p><img src="https://simg.open-open.com/show/2051d096be76d4c3525418fd42997a3d.jpg"> 构造商品参数集合: <img src="https://simg.open-open.com/show/131b6717c27d076e487009134bb134a0.jpg"></p>    <p>3、因为统一下单接口需要以xml格式post发送给微信,所以我们先拼接xml格式的参数:</p>    <p><img src="https://simg.open-open.com/show/4c3c46acfb019b2c499977d7630f3eac.jpg"></p>    <p>然后是我们的异步线程请求统一下单接口:</p>    <p><img src="https://simg.open-open.com/show/ae0ea5f7dc4601fab3d9321c3f12d07a.jpg"></p>    <p>这里从微信返回来的正确的结果为:xml格式的字符串,里面的“prepay_id”就是我们需要用在调取支付界面所要的重要参数。其中的Util.httpPost(url, str)方法可以在微信提供的demo中拷贝过来就行。(在这一步很多时候都返回的是“签名错误”,就要检查商户key是否正确,最常见的错误就是“body”字段是中文,然后post发送的时候没有转换为“iso8859-1”编码,导致签名错误。</p>    <p>4、通过统一下单接口成功获取到了“prepay_id”后,就可以调取支付接口了(如果是服务器生成订单,可以直接从这一步开始):</p>    <p><img src="https://simg.open-open.com/show/ea61a77d63feecd1d950e4be1742eb80.jpg"></p>    <p>使用到的工具类方法:</p>    <p><img src="https://simg.open-open.com/show/88b6be7e4072fc27ca5a9f6f7ee1abfc.jpg"></p>    <p><img src="https://simg.open-open.com/show/b753c44c4835b7c081fd149dbc483830.jpg"></p>    <p>其中:</p>    <p>这里用到了把xml转换为list的方法(用的是dom4j.jar):</p>    <p><img src="https://simg.open-open.com/show/79c466aeb27d841f3322a4132f29b1ca.jpg"></p>    <p>5、这样就成功的调到了支付界面 </p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/87c62ccc4d352bc56cedc9e1858fdf88.jpg"></p>    <p>这是刚开始解决中文乱码是,单独对中文转码后的结果,微信端没有转码,就成这样了。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/f5ec881736176f633865cef6ac635a03.png"></p>    <p>这是body是英文的时候,能正常支付。</p>    <p>6、最后在微信回调页面处理支付结果:</p>    <p><img src="https://simg.open-open.com/show/ad0e24470919140ea30b7b727fad8f8d.jpg"></p>    <p><img src="https://simg.open-open.com/show/8f36dbddf978303699f4a6cbb02d4c45.jpg"> <img src="https://simg.open-open.com/show/18e191c5d3445880d08e31cd8147c6b9.jpg"></p>    <p>这样微信支付爬坑结束,不容易啊。。。 哈哈哈</p>    <p> </p>    <p> </p>    <p>来自:http://mp.weixin.qq.com/s?__biz=MzI2OTQxMTM4OQ==&mid=2247484224&idx=1&sn=e856f3bae7fc8a0f9660b29eac279ccf&chksm=eae1f612dd967f04f0a72813f1f92e466b4934b7fd2dc6a0c54f40aef16e7642c540bd09370d#rd</p>    <p> </p>