介绍:
1、支付宝支付
支付宝在官方文档中写的比较详细,给的DEMO也很清楚,大家跟着步骤走一步一步都能实现集成。主要是以下几个需要稍微注意一下
1、Header Search Paths的设置
添加支付宝官方库,导入系统库,其他的不需要设置太多。但是这一个必须要添加以下,不然openssl中的头文件引用会出现问题。
在项目->Build Settings->Header Search Paths中添加下面一行
$(SRCROOT)/**/**/AlipaySDK 其中$(SRCROOT)是项目根目录,AlipaySDK是官方库所在的文件夹。中间路径需要自己添加。
2、appScheme的设置
支付宝有三个地方需要设置而且要保持一致,不然支付完成就无法跳转回应用。Demo中写的是alipayPayDemo
1)项目->Info->URL Types->+->URL Schemes
2)info.plist->URL Types->URL Schemes 此项一般添加1)后就会自动添加,如有修改记得修改此处。因为修改1),此处不会跟着修改。
3)AlipayHelper.m->@selector(alipay:block:)方法中的局部参数appScheme
3、跟服务端的交互的地方
只有获取订单信息的时候才会跟服务进行交互,所需要的参数在Product中。测试中price一般情况下都给0.01
微信支付
微信的设置上没太大问题,但是做的官方支持就非常差劲。而且还使用XML,这一条让一些人可能就懵逼了。
客户端需要做的两步,如果服务端做了统一下单的功能就缩短为一步了。
1、统一下单
https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=9_1 ->API列表->统一下单 按照文档要求appid,mch_id,nonce_str,sign,body,out_trade_no,total_fee,spbill_create_ip,notify_url,trade_type这十个参数是必须的。
其中appid,mch_id是微信给的;trade_type传定值APP;nonce_str,spbill_create_ip是直接在手机上获取到的;body,out_trade_no,total_fee这三个是从服务端上获取的数据。sign根据以上键值对按照签名规则得到的。
完成之后要转化成XML格式上传到微信服务器。
第一个比较坑的地方在这,如果直接使用AF的POST方式是不行的,总是会返回"XML格式错误"。必须使用NSMutableURLRequest添加method和body,然后用AFHTTPRequestOperation进行网络请求才行。
然后接收到数据的返回。其中返回数据中有用的只有prepayid,其他的要么本地就有,要么就是恶心你的值。
2、客户端调起支付
https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=9_1 ->API列表->调起支付接口 文档要求appid,partnerid,prepayid,package,noncestr,timestamp,sign这七个参数是必须的,但是DEMO中appid根本没有用到,所以其实只需要六个参数,这是第二个坑爹的地方!!! partnerid就是第一步的mch_id,prepayid是上一步返回的最重要的数据,package传定值Sign=WXPay,noncestr就是上一步中的nonce_str,timestamp这个按照规则生成十位的。
sign是最最最坑的地方,不是上一步返回的那个sign,不是上一步返回的那个sign,不是上一步返回的那个sign。他是根据上面的五个参数进行签名得出的值。不然每次调用就只看见微信界面只有一个确定。
对于返回签名错误的,可以对照他们的签名测试工具检验。https://pay.weixin.qq.com/wiki/tools/signverify/
以上~
因安全原因项目中的一些配置参数已经删除,大家调试的时候需要添加本公司或个人申请的配置参数。
测试环境:
编译测试,测试环境:Xcode7.0,iOS 9.0。
使用方法:
1、由于支付宝SDK 和 微信支付SDK 过大,Code4上面的代码将这两个SDK 移除,需要的开发者可以直接下载需要的SDK 并放到项目 Helper 文件夹下,或者到 github 下载完整项目。
2、因安全原因项目中的一些配置参数已经删除,大家调试的时候需要添加本公司或个人申请的配置参数。
#pragma mark - SDK宏定义 //////////////////////////支付宝////////////////////////////// #define AlipayPARTNER @"" #define AlipaySELLER @"" #define AlipayRSA_PRIVATE @"" #define AlipayRSA_ALIPAY_PUBLIC @""; //获取服务器端支付数据地址(商户自定义) #define AlipayBackURL @"" //////////////////////////微信////////////////////////////// #define WeChatAppID @"" #define WeChatAppSecret @"" //商户号,填写商户对应参数 #define WeChatMCH_ID @"" //商户API密钥,填写相应参数 #define WeChatPARTNER_ID @"" //支付结果回调页面 #define WeChatNOTIFY_URL @"" //获取服务器端支付数据地址(商户自定义) #define SP_URL @""
//http://pay1.fujin.com/aspx/alipayreturn_m.aspx?f=app1
在项目中的CommonUtils -》AppUtils.h 下