PayDemo - 支付宝和微信支付两种方式集成

本博客转载于这个地址:http://www.open-open.com/lib/view/open1451631618823.html

PayDemo
支付宝和微信支付两种方式集成

做这两个支付集成的时候遇到了一些坑,特此写了一个小的DEMO供大家参考

1、支付宝的集成比较简单,主要就是一些设置上的问题; 2、微信的集成比较坑爹,而且官方文档写的也不清不楚的,坑了我很久。

项目中使用的pod添加了三个第三方的框架:AFNetworking Masonry XMLDictionary

一些iOS9的设置就不在下面提了,大家自行百度吧。

支付宝支付
支付宝在官方文档中写的比较详细,给的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,其他的要么本地就有,要么就是恶心你的值。

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/

以上~

项目地址: https://github.com/ioswpf/PayDemo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用 Egg.js 框架实现微信支付,你需要进行以下步骤: 1. 首先,确保你已经在微信开放平台上注册了一个应用,并获得了相应的 AppID 和 AppSecret。 2. 在你的 Egg.js 项目中,安装 `egg-wechat-api` 和 `wechat-pay` 这两个依赖包。你可以通过以下命令安装它们: ```shell npm install egg-wechat-api wechat-pay --save ``` 3. 在 Egg.js 的配置文件 `config/config.default.js` 中,添加以下配置项: ```javascript // 配置 egg-wechat-api 插件 config.wechatApi = { appid: 'your_appid', appsecret: 'your_appsecret', token: 'your_token', encodingAESKey: 'your_encoding_AES_key', }; // 配置 wechat-pay 插件 config.wechatPay = { appid: 'your_appid', mch_id: 'your_mch_id', partner_key: 'your_partner_key', notify_url: 'your_notify_url', pfx: require('fs').readFileSync('/path/to/your_cert.p12'), }; ``` 替换上述配置项中的 `your_appid`、`your_appsecret`、`your_token`、`your_encoding_AES_key`、`your_mch_id`、`your_partner_key`、`your_notify_url` 和 `/path/to/your_cert.p12` 分别为你在微信开放平台和商户平台上的实际配置。 4. 在你的 Egg.js 控制器中,可以使用 `app.wechatApi` 和 `app.wechatPay` 来调用微信 API 和支付 API。你可以根据微信支付的具体接口文档,编写相应的支付逻辑。 以上是使用 Egg.js 实现微信支付的基本步骤,你还可以根据自己的需求进行更多的定制和扩展。注意,这里只提供了一个简单的示例,实际使用中还需要考虑安全性和错误处理等方面的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值