热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

集成支付宝

关于支付宝,不说了,直接开始吧。首先当然要去支付宝开放平台注册账号以及下载SDK之类的,然后在自己项目中添加好依赖库,添加urlscheme等等我直接讲代码服务

关于支付宝,不说了,直接开始吧。


首先当然要去支付宝开放平台注册账号以及下载SDK之类的,然后在自己项目中添加好依赖库,添加 url scheme 等等...

我直接讲代码


服务器签名版本:

现在为了安全考虑基本上都是服务器签名,所以这就极大的简化了我们在代码里的操作,只需一步即可调出支付

下面就是点击支付按钮的方法

    //应用注册scheme
    NSString *appScheme = @"这里写你自己配置的 url scheme";
    //调支付
    [[AlipaySDK defaultService] payOrder:@"签名之后的订单信息字符串(服务器返回给我们的)" fromScheme:appScheme callback:^(NSDictionary *resultDic) {
        
        //支付宝的回调对应的状态码
        NSInteger resultStatus = [resultDic[@"resultStatus"] integerValue];
        
        /*
         9000 订单支付成功
         8000 正在处理中
         4000 订单支付失败
         6001 用户中途取消
         6002 网络连接出错
         */

         //之后根据回调处理结果即可
 }];

然后还要在AppDelegate.m里处理一下回调

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    
    
    if ([url.host isEqualToString:@"safepay"]) {
        
        //跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];

        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
            
            if ([resultDic[@"resultStatus"] integerValue] == 9000) { //支付成功
                
                NSLog(@"支付成功");
            }
            
        }];
        
        return YES;
}

上面我写了两遍回调方法是因为我发现只写一次的话,支付回来之后并不会执行block里的内容,而写两次才会走下面方法里的block,很奇怪,至今我也不知道为什么


本地签名版本:

因为我们后台没做过支付,所以做的时候有问题,导致我只能本地签名成功之后跟后台返回的参数一一比较,最后才解决好,姑且也做了下本地签名的方法:

需要从支付宝demo里把以下文件导入工程

技术分享技术分享

导入以上文件后,应该会遇到什么文件找不到之类的错误

解决办法:把以上文件丢入一个文件夹内,然后把文件夹拖到 Targets->Build Settings->Header Search Path中,我这就不截图了,实在不会就百度一下,很多的.

然后在支付方法里写:

    //创建订单对象
    Order *order=[[Order alloc]init];  
    order.partner=@"从商户后台获取";  
    order.seller=@"收款账户";  
    order.tradeNO=@"订单ID";//商家自行决定
    order.productName=@"商品标题";  
    order.productDescription = @"商品描述";
    order.amount = @"0.01" ;//商品价格  
    order.notifyURL =  @"http://www.xxx.com"; //回调URL,支付后通知后台支付结果的地址

    //下面这几个参数都是固定格式,直接这样写就好
    order.service = @"mobile.securitypay.pay";  
    order.paymentType = @"1";  
    order.inputCharset = @"utf-8";  
    order.itBPay = @"30m";  
    order.showUrl = @"m.alipay.com";  
    
    //这个自己配置
    NSString *appScheme = @"url scheme";  
      
    //将商品信息拼接成字符串
    NSString *orderSpec = [order description];  

    //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode  
    id signer = CreateRSADataSigner(privateKey);  

    //此签名信息是Util和openssl里面的文件生成的数据
    NSString *signedString = [signer signString:orderSpec];  
      
    NSLog(@"orderSpec = %@",orderSpec);  
      
   //将签名成功字符串格式化为订单字符串,请严格按照该格式
   NSString *orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",  
                   orderSpec, signedString, @"RSA"];
   
   //调起支付
   [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {

         NSLog(@"reslut = %@",resultDic);
    }];

还算比较简单吧,比后台签名版本仅仅多了个本地签名的步骤,而且签名方法都是现成的不用我们写,以上就是集成支付宝的代码


集成支付宝


推荐阅读
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
author-avatar
粪想升或_519
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有