前段时间,公司业务需要接入微信支付,博主就苦心钻研了2天,终于搞通了,但*近 iOS 9 更新出来后,微信支付,又不可以使用了,具体解决方案我在后面会给出。当然,微信接入也有不少的坑啊 说多了全是泪,三巨头的东西也不一定总是那么好使!好了正题来了!

虽是基于iOS的,同时,安卓的接入也类似。

要完成手机APP跳转到微信的APP进行微信支付,需要先进行如下操作:

1、先去微信的开放平台(http://open.weixin.qq.com)进行微信开发者账号的注册(建议公司统一注册,尽量不要使用私人邮箱)。

2、新建一个APP应用,然后填写必填的信息提交审核,这里 一次性注册iOS和安卓两个版本的APP。

3、查看已创建好的APP应用,进行申请“ 获得微信支付能力 ”的功能,需要提交公司真实的相关营业执照等信息证明。

提交申请后,经过一周左右,基本可以申请下来,没有细节难点,应该都能搞定,实在不行,给你个机会,联系客服妹子吧!

基本的对接流程 微信官网的有详细的讲解  (https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_1)

一、服务器的接入

首先,这一部分后台接入,我们只需要根据后台提供的接口,调用即可。在进行服务端对接之前,需要用到如下信息:

/* 微信app key 这两个就是我们上面申请的APP得到的*/
W_APP_ID
W_APP_SECRET
//商户号
W_MCH_ID–这个也是需要登录商户平台进行获得
//API密钥,在商户平台设置
W_API_KEY–这个需要登录商户平台进行获得

商户平台的登录地址(https://pay.weixin.qq.com/index.php)

一、.net服务端的对接:

1、直接上微信的SDK列表下载.net的SDK(https://pay.weixin.qq.com/wiki/doc/api/download/WxPayAPI_CS_v3.zip)

2、要先知道一点,下载回来的SDK是没有具体包含“统一下单API”的,只包含了这个“刷卡支付、微信内网页支付、扫码支付”

3、下载回来的SDK中,*次运行是运行不了的,需要对代码进行设置

1)对上面四个参数进行配置,具体在lib\Config.cs文件中

2)屏蔽掉lib\HttpService.cs的代理访问:(这东西基本可以不用使用到)

%title插图%num

4、通过以上的几步配置,基本可以运行了

5、还有一个点,我们点击Default.aspx页面上的按钮,链接过去的地址要注意一下,其实不是我们的测试工程,而是paysdk.weixin.qq.com的,这个需要改成是我们的测试功能才行(这个是比较吭的)。

6、如何对接“统一下单API”,*基本的做法就是打开business\JsApiPay.cs文件,然后拷贝GetUnifiedOrderResult方法直接用,但是如果拷贝这个方法用的时候,会提示“无权限调用”。其实*根本的错误在于我们传递的trade_type为JSAPI导致的,所以拷贝过来使用的时候,需要做如下的更新:(为什么要这样了,原因很简单,这个方法的用途本来就是给JSAPI的,我们是要使用trade_type为APP进行调用,这些参数当然要变拉)

%title插图%num

只要这些字段即可,其余的可有可无,都不影响,到了这点,你运行“统一下单”功能,就会返回prepay_id了,也就是支付ID。

至此,通过这些设置,基本都可能成功。

二、iOS的对接

*常见的问题就是,我把官方的请求地址换成了自己之后,点击支付测试,跳转到微信支付的页面时,中间就只出现了一个“确定”按钮,点击之后返回到原APP,提示“支付失败,xxx -2”这样的提示。

1、如果你有这些提示了,我可以很肯定的告诉你,你的sign错了,而且是用错了,你不应该直接用服务端返回的sign,这个根本不是一回事。

2、切记,客户端的sign字段,是要自己生成的,当然服务端哥们给力的话,也可以,记得协商好哈。

3、还要切记,服务端返回的那一串json,*有用而且*优价值的就唯一一个prepay_id,其余的基本不需要。

4、官方的iOS SDK中,包含了两个方法(sendpay_demo、sendpay),这也是*容易错的,我们在对接的时候,选择sendpay的方法,也就是这个:

%title插图%num

这个方法的东西其实是不完整,*明显,我们把网络请求改了之后,再把所用到的参数赋值,然后就没有然后了,根本调不起来,压根就没反应,原因是缺少了package参数值,这个是固定的(Sign=WXPay)

%title插图%num

5、改了第四点之后,肯定是能调用起来的了,但是确不能支付,sign错误导致的,至此,你应该把注意力集中到sendpay_demo的方法中去,不要再使用sendpay方法了

只需要把刚才获取的prepay_id替换掉,立马就能正常使用支付功能,如下位置的参数替换成我们网络请求返回的的就行了:

%title插图%num

%title插图%num

三、iOS9 白名单 微信支付提示未安装微信 、支付宝不跳转客户端支付的解决方案

苹果公司iOS 9系统策略更新,限制了http协议的访问,此外应用需要在“Info.plist”中将要使用的URL Schemes列为白名单,才可正常检查其他应用是否安装。

受此影响,当你的应用在iOS 9中需要使用微信SDK的相关能力(分享、收藏、支付、登录等)时,需要在“Info.plist”里增加如下代码:

<key>LSApplicationQueriesSchemes</key>

<array>

<string>weixin</string>

<string>wechat</string>

<string>alipay</string>

</array>

<key>NSAppTransportSecurity</key>

<dict>

<key>NSAllowsArbitraryLoads</key>

<true/>

</dict>

完成后需使用Xcode 7编译。

请注意:未升级到微信6.2.5及以上版本的用户,在iOS 9下使用到微信相关功能时,仍可能无法成功。4

总结,希望此篇文章对正在做微信支付对接的哥们有帮助,也让大家少走一些弯路,如果觉得合适,可以顺手点个赞,以此鼓励鼓励。thanks