开发环境xcode7.1 运行环境 IOS9.1

到支付宝面面下载IOS的移动支付功能的SDK(Android和IOS是同一个zip文件下)

http://doc.open.alipay.com/doc2/detail?treeId=54&articleId=103419&docType=1

然后申请商家支付宝,得到相应的private_key和partner,seller

IOS的资料在SDK文件夹的“客户端demo”下的IOS文件夹下

复制AlipaySDK.bundle和AlipaySDK.framework到项目下

复制IOS Demo下的两个.a文件到项目下

复制iOS Demo下的openssl文件夹,Util文件夹,Order.h,Order.m(省得自己在swift中定义订单)文件到项目中

在xcode中创建一个项目AlipayDemo,在项目中Add Files to AlipayDemo所有的.a文件和openssl文件夹,Util文件夹,Order.h,Order.m,此时系统提示创建头文件,选择允许创建(可以手动添加一个.h文件作为头文件)

如果在基于IOS9.0编译,在info.list中添加如下xml代码(info.list以SourceCode形式打开)

<key>NSAppTransportSecurity</key><dict><key>NSExceptionDomains</key><dict><key>alipay.com</key><dict><!--Includetoallowsubdomains--><key>NSIncludesSubdomains</key><true/><!--IncludetoallowinsecureHTTPrequests--><key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key><true/><!--IncludetospecifyminimumTLSversion--><key>NSTemporaryExceptionMinimumTLSVersion</key><string>TLSv1.0</string><key>NSTemporaryExceptionRequiresForwardSecrecy</key><false/></dict></dict></dict>


增加头文件

Util中的base64.h,openssl_wrapper.h添加#import <Foundation/Foundation.h>,给支付宝AlipaySDK.h添加#import <Foundation/Foundation.h>和#import<UIKit/UIKit.h>

设置Build Settings

查找Bitcode,把Yes改成No

查打Header SearchPaths,点小+号,添加$(SRCROOT)/AlipayDemo

在info的URL Types中添加一个GSWAlipayDemo的节点,以备代码中Order的appScheme使用。

代码实现

importUIKitclassViewController:UIViewController{overridefuncviewDidLoad(){super.viewDidLoad()letbut=UIButton(type:UIButtonType.System);but.setTitle("支付",forState:UIControlState.Normal);but.backgroundColor=UIColor.greenColor();but.frame=CGRect(x:10,y:100,width:100,height:30);but.addTarget(self,action:"click",forControlEvents:UIControlEvents.TouchUpInside);self.view.addSubview(but);}funcclick(){AliplayFunc();print("click")}varTicketTotalprice:Float=0.01;//支付金额varseller:String="支付宝申请的seller";varpartner:String="支付宝申请的partner";varprivateKey:String="替换支付申请的privet_key";funcAliplayFunc(){letOrders=Order()Orders.partner=partnerOrders.seller=sellerOrders.productName="ProductName";Orders.productDescription="thisisagoods";Orders.amount=NSString(format:"%.2f",TicketTotalprice)asString;//(价格必须小数点两位)Orders.tradeNO="DJ0000000001";Orders.notifyURL="http://selftweb.com";Orders.service="mobile.securitypay.pay";Orders.paymentType="1";Orders.inputCharset="utf-8";Orders.itBPay="30m";Orders.showUrl="m.alipay.com";letappScheme="GSWAPayDemo";//在letorderSpec=Orders.description;letsigner=CreateRSADataSigner(privateKey);letsignedString=signer.signString(orderSpec);letorderString="\(orderSpec)&sign=\"\(signedString)\"&sign_type=\"RSA\"";AlipaySDK.defaultService().payOrder(orderString,fromScheme:appScheme,callback:{(resultDic)->Voidinprint("reslut=\(resultDic)");ifletAlipayjson=resultDicas?NSDictionary{letresultStatus=Alipayjson.valueForKey("resultStatus")as!StringifresultStatus=="9000"{print("OK")}elseifresultStatus=="8000"{print("正在处理中")self.navigationController?.popViewControllerAnimated(true)}elseifresultStatus=="4000"{print("订单支付失败");self.navigationController?.popViewControllerAnimated(true)}elseifresultStatus=="6001"{print("用户中途取消")self.navigationController?.popViewControllerAnimated(true)}elseifresultStatus=="6002"{print("网络连接出错")self.navigationController?.popViewControllerAnimated(true)}}})}overridefuncdidReceiveMemoryWarning(){super.didReceiveMemoryWarning()//Disposeofanyresourcesthatcanberecreated.}}

Demo源代码