美文网首页
iOS集成支付宝支付、银联支付及微信支付

iOS集成支付宝支付、银联支付及微信支付

作者: T92 | 来源:发表于2016-10-28 11:06 被阅读186次

一、支付宝支付

支付宝官网:https://doc.open.alipay.com(蚂蚁金服开放平台)

1.支付宝支付流程

简单说就三个步骤:
1>生成订单(可以在客户端生成,也可以在服务器端生成)
2>调用支付宝支付接口,发送订单
3>处理支付宝返回的支付结果

2.关于签名校验

按理说,这些步骤完全够了,但是有一个安全性问题,你肯定不希望你接收的支付结果被截获修改,所以,这就需要在生成订单和处理支付结果的时候做一个安全性校验
  生成订单时对数据签名,收到支付结果时对数据进行签名校验,以校验数据是否被篡改过
  支付宝目前只支持RSA加密方式做签名校验,RSA加密算法,除了可加解密之外,还可以做签名校验,简单地说,RSA会生成一个私钥和一个公钥,私钥你应该独自保管,公钥你可以分发出去。做签名验证时,你可以用私钥对需要传输的数据做签名加密,生成一个签名值,之后分发数据,接收方通过公钥对签名值做校验,如果一致则认为数据无篡改
  具体到支付宝使用RSA做签名验证,就是在生产订单时,需要使用私钥生成签名值;在处理返回的支付结果时,需要使用公钥验证返回结果是否被篡改了

3.配置工程

3.1、导入SDK到工程中

1拖入

3.2、添加系统静态依赖库
SystemConfiguration.framework
CoreTelephony.framework
QuartzCore.framework
CoreText.framework
CoreGraphics.framework
UIKit.framework
Foundation.framework
CFNetwork.framework
CoreMotion.framework
libc++.tbd
libz.tbd

2静态库

3.3 修改SDK的路径
target-build setting-Header Search Paths (没用到)

3.4、 创建桥接文件

3头文件
    //预编译头文件
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

    支付宝头文件
#import "RSADataSigner.h"
#import <AliPaySDK/AliPaySDK.h>
#import "Order.h" 

3.5、iOS9网络适配

网络设置
    添加白名单(否则无法调起支付宝客户端)
    <key>LSApplicationQueriesSchemes</key>
      <array>
        <!-- 支付宝 URL Scheme 白名单-->
           <string>alipay</string>
           <string>alipayshare</string>
        </array>

3.6、设置应用Scheme
增加Scheme,方便支付宝客户端能够将支付结果返回,尽量保证Scheme唯一

起唯一标识名字

报错解决:

报错解决 报错解决 报错解决

3.7、实现支付

  • AppDelegate
屏幕快照 2016-10-28 下午2.11.13.png
  • 全局
屏幕快照 2016-10-28 下午2.18.50.png

实现

import UIKit

//支付流程:
//1.用户生成订单:可在客户端或服务端
//2.用户选择支付宝付款:调取用支付宝客户端胡支付网页
//3.支付宝服务器处理支付结果并将支付结果返回到用户

class ViewController: UIViewController {

    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        
    }

    @IBAction func alipayAction(sender: AnyObject) {
        
        //*******************订单设置
        
        //创建订单
        let order = Order()
        
        //商户id:商户在支付宝签约时,支付宝为商户分配的唯一标识号(以2088开头的16位纯数字)
        order.partner = partner
        
        //账户id:卖家支付宝账号对应的支付宝唯一用户号(以2088开头的16位纯数字),订单支付金额将打入该账户,一个partner可以对应多个seller_id。
        order.sellerID = seller
        
        //订单号:商户网站商品对应的唯一订单号。一般由后台生成
        order.outTradeNO = "201610261008" //随意
        
        //资金总额:该笔订单的资金总额,单位为RMB(Yuan)。取值范围为[0.01,100000000.00],精确到小数点后两位。
        order.totalFee = "0.01"
        
        //交易说明:商品的标题/交易标题/订单标题/订单关键字等。
        order.subject = "单身狗粮"
        
        //商品具体描述:对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
        order.body = "花式虐狗"
        
        //*******************参数设置
        
        //获取商品全部描述
        let orderDes = order.description
        
        //开始使用私钥签名(客户端执行,实际项目建议放在后台做,传输更安全)
        let signer = CreateRSADataSigner(privateKey) as! RSADataSigner
        
        //打包签名信息
        signer.signString(orderDes)
        
        //拼接商品信息
        //参数1:商品全部描述
        //参数2:打包后的签名信息
        //参数3:校验方式RSA
        let orderStr = String(format: "%@&sign=\"%@\"&sign_type=\"%@\"", orderDes,signer,"RSA")
        
        //*********************支付
        
        //发起支付请求
        //参数1:拼接信息
        //参数2: 回调的唯一标示
        //参数3:支付之后的回调
        AlipaySDK.defaultService().payOrder(orderStr, fromScheme: "CDiosAlipay") { (ret) -> Void in
            
        }
    }
}

二、银联支付

银联移动支付平台地址:https://open.unionpay.com/ajweb/product/detail?id=3;下载SDK

1.支付流程


流程图说明
(1)用户在客户端中点击购买商品,客户端发起订单生成请求到商户后台
(2)商户后台收到订单生成请求后,推送订单信息到银联后台
(3)银联后台接收订单信息并检查通过后,生成对应交易流水号,并回复至商户后台
(4)商户后台接收到交易流水号,将交易流水号返回至客户端
(5)客户端通过交易流水号调用支付控件
(6)用户在支付控件中输入相关支付信息后,由支付控件向银联后台发起支付请求
(7)支付成功后,银联后台将支付结果通知给商户后台
(8)银联后台同时也将支付结果通知支付控件
(9)支付控件显示支付结果并将支付结果返回至客户端

2.测试账号

以下是测试用卡号、手机号等信息(此类信息仅供测试使用,不会发生真实交易)
测试账号1:
招商银行借记卡:6226090000000048
手机号:18100000000
密码:111101
短信验证码:123456(先点获取验证码之后再输入)
证件类型:01身份证
证件号:510265790128303
姓名:张三

测试账号2:
华夏银行贷记卡:6226388000000095
手机号:18100000000
CVN2:248
有效期:1219
短信验证码:123456(先点获取验证码之后再输入)
证件类型:01身份证
证件号:510265790128303
姓名:张三

3.配置工程

3.1. 导入SDK
SDK包括两个文件:UPPaymentControl.h文件和libPaymentControl.a,将SDK目录添加到工程

1.拖入

3.2 添加系统依赖库
CFNetwork.framework
systemConfiguration.framework
libz.tbd
libc++.tbd

2静态库

3.3 修改编译选项
targets-build settings -Linking-other linker flags 设置为-ObjC

3flag

如果该设置出现和其他第三方库冲突,或银联客户端莫名失效,可尝试去掉-ObjC,改为-force_load+空格+控件路径

3.4 设置应用Scheme
用于支付完成之后返回商户客户端

4起名

3.5 iOS9网络适配
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>

6网络.png

3.6添加协议白名单
<key>LSApplicationQueriesSchemes</key>
<array>
<string>uppaysdk</string>
<string>uppaywallet</string>
<string>uppayx1</string>
<string>uppayx2</string>
<string>uppayx3</string>
</array>

7白名单.png

3.7 创建桥接文件
import "UPPaymentControl.h"

桥接导入

4 实现支付

服务器接口
为了从服务器获得交易流水号,银联提供了一个模拟接口:
http://101.231.204.84:8091/sim/getacptn

  • Appdelegate
屏幕快照 2016-10-28 下午2.34.16.png

实现

import UIKit

//银联支付方式
//1.用户选择银联支付方式,将商品信息打包上传到公司服务器,公司服务器将信息推送到银联后台
//2.银联后台检查通过之后返回交易流水号到公司服务器,公司服务器在返回给用户
//3.客户端获取到交易流水号之后直接向银联支付控件发起请求
//4.回调得到支付结果

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
    }

    @IBAction func unionPayAction(sender: AnyObject) {
        
        //公司服务器接口
        //银联提供模拟接口:http://101.231.204.84:8091/sim/getacptn
        //主要是为了获取交易流水号
        let url = "http://101.231.204.84:8091/sim/getacptn"
        //设置请求(可变请求)
        let request = NSMutableURLRequest(URL: NSURL(string: url)!)
        //请求方式
        request.HTTPMethod = "GET"
        //向公司发起请求,这里使用系统的NSURLSession,其他第三方网络请求也可以
        let dataTask = NSURLSession.sharedSession().dataTaskWithRequest(request) { (data, response, error) in
            //请求交易流水号成功后的回调
            //交易流水号
            let tradeNo = NSString(data: data!, encoding: NSUTF8StringEncoding) as! String
            
            //通过交易流水号发起银联支付
            //参数1:交易流水号
            //参数2:URL scheme
            //参数3:当前环境,01表示测试,00表示正式环境
            //参数4:执行当前操作的控制器
            UPPaymentControl.defaultControl().startPay(tradeNo, fromScheme: "UnionPayCDios", mode: "01", viewController: self)
        }
        
        //开始发起支付请求
        dataTask.resume()   
    }   
}

三 微信支付

官方文档:http://pay.weixin.qq.com

1.注册账号

注册步骤:
(1)首先在微信开放平台上注册,在账号中心填写开发者资质审核申请,等待审核通过。
(2)在管理中心注册应用,如果应用需要支付,则需填写企业资质、经营类目、结算账户
(3) 商户登录商户平台,填写结算账户
(4)在线签署《微信支付服务协议》
(5)获得微信支付能力

审核通过后,会在邮件中获取参数,分别是微信支付商户号、AppID和AppSecret,API秘钥在商户平台获得,AppID在客户端应用中会使用,AppSecret和微信支付商户号、API秘钥在服务器端使用

2.支付流程

流程图说明
(1)用户在商户APP中选择商品,提交订单,选择微信支付
(2)商户后台收到用户支付单,调用微信支付同意下单接口
(3)统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP,参与签名的字段名为appId,parterId,prepayId,nonceStr,timeStamp,package
(4)商户APP调起微信支付
(5)商户后台接收支付通知
(6)商户后台接收支付结果

3.配置工程

3.1 导入SDK,微信支付SDK包含WXApiObject.h,WXApi.h,WechatAuthSDK.h,libWeChatSDK.a四个文件

3.1 添加系统依赖库
systemConfiguration.framework
libc++
Foundation.framework
UIKit.frame
libsqlite3.tbd
libz.tbd
CoreTelephony.frame
Security.frame

3.2 设置应用Scheme
用于支付完成之后返回商户客户端

3.3 iOS9网络适配
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>

3.4 创建桥接文件

#import <AVFoundation/AVFoundation.h>
#import "WXApiObject.h"
#import "WXApi.h"

3.5 实现支付

相关文章

网友评论

      本文标题:iOS集成支付宝支付、银联支付及微信支付

      本文链接:https://www.haomeiwen.com/subject/ziteuttx.html