支付宝支付

来源:互联网 发布:wemall java版 编辑:程序博客网 时间:2024/06/10 05:54

支付宝支付


1.导入SDK

 支付宝开放平台地址为:https://openhome.alipay.com/platform/home.htm;下载(SDK&DEMO下载)SDK,将AlipaySDK.bundle和AlipaySDK.framework导入工程。

  将官方demo中Util和openssl文件夹以及libcrypto.a和libssl.a一块导入到自己的工程,这些事客户端签名时使用


2.添加配置

2.1 添加依赖库

Pasted Graphic.tiff

2.2 修改路径

在Build setting下的search path下修改header search path,增加

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include 

$(SDK_DIR)/usr/include/libxml2$(PROJECT_DIR)/xxxxx/AliSDK/openssl$(PROJECT_DIR)/xxxxx/AliSDK

在Framework search path和library search path下增加 $(PROJECT_DIR)/xxxxx/AliSDK

2.3 增加pch文件

增加一个预编译头文件,导入

#import <Foundation/Foundation.h>

#import <UIKit/UIKit.h>

//商户的唯一的parnterseller

//签约后,支付宝会为每个商户分配一个唯一的 parnter seller

#define PARTNER    @"2088611922925773"

#define SELLER     @"esok@esok.cn"

#define PRIVATEKEY  @"MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBANfEOGuHDyStqzetu37gO0Lxy9ucCVpT3t7oao/oYHyeQIhI4sxu7dnTbSdsR3DKglHg+9sNbIvubxxeLPvfjrF/Lvky0sYIGBRYyQXQb+kwOq0dwqHGvqN4FP1EwI69CfQP/a2J/z4D0stF/htv4B24dxag7mxZIKLJJvwstUbnAgMBAAECgYEAtVsDhTXPP6gNqs4HM3xrszgjfiIoJlkqkjfOIclTGEu3uBVzNBvlJdq0+5bicWZ1pTay2ors+qzdjX2G1+ovN2x9ZIZyVDL0P1CqgzwEu7hCIC5I/hlcMIux+h0U93stRxeimdCcbj2hCfzewE77hP4GQ6F4llzgDtvm9X41CYkCQQDy+63bcv7huWydUOuN7ObhOTAjoAe5SxJL89UkFkMGwJYqUm2cRNAkaJ3OPBBBXEeDpBjh323L6g0pUnM6q32lAkEA41NJY+GAXVUAWnAKNJHfXEi3XopnStsPRRL6gRCqTcceWEicq6CtyHEIxJuldiG0AP2u+Fh5faWx4phXKFEkmwJAFdGt2f/ojWJ2M2Y50MPOM7lL7lcHeocYPIPHxvbMzAVtNp2yRA8V1b8jNIrGNuhPb63DojzLAj2hMu25dTJDFQJAFi24CVCk73YtlKU9uadJvX0ytryWG02IDdsuKY1wsCnvIfnjnzMMAXRVwKjW2dGr+DTH717ia4nQ8ySdzEcuZQJAf1aGvpNuRP9Sf043ymPbhBVEb2bji6ltOr9R1VpCuaojP/EAYEAanzHLvcG+kc0QAk57+7hWp3smNQu+aYt1oQ=="


并修改build setting下配置pch文件的路径

Pasted Graphic_1.tiff

2.4 设置应用Scheme

info.plist中增加自己app的scheme,以便支付宝客户端能够将支付结果返回,在URL type下点击+,添加一个新的scheme,schem名字要唯一,如果和移动端其他应用scheme重名,结果不可预测

Pasted Graphic 1.tiff



3.iOS9适配

如果你的app基于9.0编译,那么为了适配iOS9.0中的App Transport Security(ATS)对http的限制,这里需要对支付宝的请求地址alipay.com、alipayobjects.com做例外,在app对应的info.list中添加如下配置(文中以XML格式描述)。

<key>NSAppTransportSecurity</key>

    <dict>

        <key>NSExceptionDomains</key>

        <dict>

            <key>alipay.com</key>

            <dict>

                <key>NSIncludesSubdomains</key>

                <true/>

                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>

                <true/>

                <key>NSTemporaryExceptionMinimumTLSVersion</key>

                <string>TLSv1.0</string>

                <key>NSTemporaryExceptionRequiresForwardSecrecy</key>

                <false/>

            </dict>

            <key>alipayobjects.com</key>

            <dict>

                <key>NSIncludesSubdomains</key>

                <true/>

                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>

                <true/>

                <key>NSTemporaryExceptionMinimumTLSVersion</key>

                <string>TLSv1.0</string>

                <key>NSTemporaryExceptionRequiresForwardSecrecy</key>

                <false/>

            </dict>

        </dict>

    </dict>

也可以做如下配置

<key>NSAppTransportSecurity</key>

    <dict>    

        <key>NSAllowsArbitraryLoads</key><true/>

    </dict>


4.支付宝支付流程

T1TkxgXcBjXXXXXXXX.png



5.编码

在需要调用AlipaySDK的文件中,增加头文件引用。

#import <AlipaySDK/AlipaySDK.h>


5.1 生成订单信息

Order *order = [[Order alloc] init];

order.partner = partner;

order.seller = seller;

order.tradeNO = [self generateTradeNO]; //订单ID(由商家自行制定)

order.productName = product.subject; //商品标题

order.productDescription = product.body; //商品描述

order.amount = [NSString stringWithFormat:@"%.2f",product.price]; //商

品价格

order.notifyURL = @"http://www.xxx.com"; //回调URL

order.service = @"mobile.securitypay.pay";

order.paymentType = @“1”;//1 支付

order.inputCharset = @"utf-8";

order.itBPay = @"30m”;//订单超时时间,s代表秒,m代表分钟,h代表小时

 

//应用注册scheme,在AlixPayDemo-Info.plist定义URL types

NSString *appScheme = @"alisdkdemo";

    

//将商品信息拼接成字符串

NSString *orderSpec = [order description];

NSLog(@"orderSpec = %@",orderSpec);

 

5.2 调用支付宝客户端

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

id<DataSigner> signer = CreateRSADataSigner(privateKey);

NSString *signedString = [signer signString:orderSpec];

    

//将签名成功字符串格式化为订单字符串,请严格按照该格式

NSString *orderString = nil;

if (signedString != nil) {

   orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",

                       orderSpec, signedString, @"RSA"];

         

   [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {

//【callback处理支付结果】

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

//支付成功

        if ([info[@"resultStatus"] isEqualToString:@"9000"]) {

            //处理

            NSLog(@"%@",info[@"resultStatus"]);

        } else if([info[@"resultStatus"] isEqualToString:@"4000”]){//支付失败

            //

             NSLog(@"%@",info[@"resultStatus"]);

        }

        else if([info[@"resultStatus"] isEqualToString:@“6001”]){//用户取消支付

            NSLog(@"%@",info[@"resultStatus"]);

        }

   }];



5. 3 配置支付宝客户端返回url处理方法。

在appDelegate中增加引用

#import <AlipaySDK/AlipaySDK.h>

在@implementation AppDelegate中增加如下代码:

- (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) {

    //【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】

            NSLog(@"result = %@",resultDic);

        }];

    }

        return YES;

}

0 0
原创粉丝点击