swift调用支付宝

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

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

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

然后申请商家支付宝,得到相应的private_keypartner,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文件作为头文件)

    wKiom1YvQdvzpSi2AATZDoGomlo067.jpg

  • 如果在基于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.hopenssl_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

importUIKit
classViewController: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=partner
Orders.seller=seller
Orders.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)->Voidin
print("reslut=\(resultDic)");
ifletAlipayjson=resultDicas?NSDictionary{
letresultStatus=Alipayjson.valueForKey("resultStatus")as!String
ifresultStatus=="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源代码

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...