swift调用支付宝
admin
2023-02-10 11:20:12
0

开发环境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文件作为头文件)

    swift调用支付宝

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

NSAppTransportSecurity
   
       NSExceptionDomains
       
           alipay.com
           
                
               NSIncludesSubdomains
                
                
               NSTemporaryExceptionAllowsInsecureHTTPLoads
                
                
               NSTemporaryExceptionMinimumTLSVersion
               TLSv1.0 
               NSTemporaryExceptionRequiresForwardSecrecy
                
           
       


  • 增加头文件

Util中的base64.hopenssl_wrapper.h添加#import ,给支付宝AlipaySDK.h添加#import #import

  • 设置Build Settings

查找Bitcode,把Yes改成No

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

 

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

  • 代码实现

import UIKit
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let but = 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);    }
    func click()
    {
        AliplayFunc();
       print("click")
    }
    var TicketTotalprice:Float=0.01;//支付金额
    var seller:String="支付宝申请的seller";
    var partner:String="支付宝申请的partner";
    var privateKey:String = "替换支付申请的privet_key";
    
    
    func AliplayFunc(){        
        let Orders = Order()        
        Orders.partner = partner        
        Orders.seller = seller        
        Orders.productName = "ProductName";        
        Orders.productDescription = "this is a goods";        
        Orders.amount = NSString(format: "%.2f",TicketTotalprice) as String ;//(价格必须小数点两位)        
        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";        
        let appScheme = "GSWAPayDemo";//在        
        let orderSpec = Orders.description;        
        let signer = CreateRSADataSigner(privateKey);        
        let signedString = signer.signString(orderSpec);        
        let orderString = "\(orderSpec)&sign=\"\(signedString)\"&sign_type=\"RSA\"";     
        AlipaySDK.defaultService().payOrder(orderString, fromScheme: appScheme, callback: { (resultDic) -> Void in            
            print("reslut = \(resultDic)");            
            if let Alipayjson = resultDic as? NSDictionary{                
                let resultStatus = Alipayjson.valueForKey("resultStatus") as! String 
                if resultStatus == "9000"{                    
                    print("OK")
                }else if resultStatus == "8000" {                    
                    print("正在处理中")                    
                    self.navigationController?.popViewControllerAnimated(true) 
                }else if resultStatus == "4000" {
                    print("订单支付失败");
                    self.navigationController?.popViewControllerAnimated(true)
                }else if resultStatus == "6001" {
                    print("用户中途取消")
                    self.navigationController?.popViewControllerAnimated(true)
                }else if resultStatus == "6002" {
                    print("网络连接出错")
                    self.navigationController?.popViewControllerAnimated(true)
                }
            }
        })
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

 Demo源代码

相关内容

热门资讯

德国总理:美国正在被伊朗羞辱 德国之声4月27日报道,德国总理默茨在访问一所学校时表示,在当前的持续冲突中,伊朗领导层正试图羞辱美...
理响中国|“长”歌以行,风云激... 光阴如梭,东方潮阔。这里是中国的长三角,世界的长三角。无论过去、现在还是未来,这片土地都因时代而生,...
白宫:特朗普及其国安团队开会讨... 新华社华盛顿4月27日电 美国白宫新闻秘书莱维特27日在记者会上证实,总统特朗普及其国家安全团队当天...
人民日报刊文:日本放开杀伤性武... 日本放开杀伤性武器出口推高地缘冲突风险(国际论坛)常思纯《人民日报》(2026年04月28日 第 0...
医疗保障法草案二审:明确生育保... 满足多样化健康保障需求本报记者 彭 波4月27日,医疗保障法草案二审稿提请十四届全国人大常委会第二十...
天津一景区发生自转旋翼机事故1... 澎湃新闻记者 吕新文中国民用航空华北地区管理局4月22日公布《豪客通航“10•1”天津长芦汉盐旅游区...
卡塔尔埃米尔与美国总统特朗普通... 当地时间24日,卡塔尔埃米尔塔米姆与美国总统特朗普通电话,重点就中东地区局势以及伊朗与美国谈判问题交...
男子30年前被扣押2859克黄... 澎湃新闻记者 王鑫家住辽宁省大连市的潘永嘉近日向澎湃新闻反映称,三十年前,他在大连周水子机场被盖州市...
商务部:取消反制欧盟两家金融机... 中华人民共和国商务部令二〇二六年 第1号鉴于欧盟已取消对中国两家金融机构的制裁措施,现公布《关于取消...
过去24小时共有5艘船只通过霍... 总台记者当地时间24日获悉,过去24小时内,共有5艘船只通过霍尔木兹海峡,其中包括一艘伊朗油轮。(总...