码迷,mamicode.com
首页 > 移动开发 > 详细

iOS支付宝支付总结

时间:2015-11-20 16:49:13      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:

1.按照http://doc.open.alipay.com/doc2/detail?spm=0.0.0.0.SWdJgo&treeId=59&articleId=103676&docType=1 《URLname:导入代码》将包给塞进去,配置好白名单和安全访问

安全访问在info.plist中

技术分享

2. 配置包路径,一定是show in finder中的路径

技术分享

Framework search Paths :$(PROJECT_DIR)/XWMerchant/ThirdParts/AlipaySDK

HeaderSearch Paths: $(PROJECT_DIR)/XWMerchant/ThirdParts/AlipaySDK

Library Search Paths: $(PROJECT_DIR)/XWMerchant/ThirdParts/AlipaySDK

 

3.配置AlipayHeader.h中的宏定义

 

#define kPartnerID @""2088开头

 /**

 *  seller:支付宝收款账号,手机号码或邮箱格式。

 */

#define kSellerAccount @""与合作者Id绑定的帐号,不要瞎搞成自己的了

/**

 *  支付宝服务器主动通知商户 网站里指定的页面 http 路径。

 */

#define kNotifyURL  @""支付宝支付完成后会通知商户的后台服务器

/**

 *  appSckeme:应用注册scheme,在Info.plist定义URLtypes,处理支付宝回调

 */

#define kAppScheme @""支付完成后回到应用中

/**

 *  private_key:商户方的私钥,pkcs8 格式。

 */

#define kPrivateKey @""//这个需要重点说说,在这里卡了一会,

    • Linux用户(以Ubuntu为例)
      $ openssl 进入OpenSSL程序
      OpenSSL> genrsa -out rsa_private_key.pem 1024 生成私钥
      OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt Java开发者需要将私钥转换成PKCS8格式
      OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem 生成公钥
      OpenSSL> exit ## 退出OpenSSL程序

生成完成之后去b.alipay.com,网站,找到我的商家服务,点击“查询PID、Key”,在合作伙伴管理密钥中设置生成的公钥,并将生成的pkcs8的私钥放在宏定义kPrivateKey里面。注册的商户移动应用现在还不知道有什么用。。。

4.支付

#pragma mark   ==============支付宝支付==============
- (void)alipay:(NSDictionary *)dic{//只包含支付订单号
    
    /*
     *生成订单信息及签名
     */
    //将商品信息赋予AlixPayOrder的成员变量
    NSString *serviceStr;
    switch (_serviceType) {
        case kXWServerTypeRecruit:
            serviceStr = @"招聘合同";
            break;
        case kXWServerTypeTurnShop:
            serviceStr = @"转店合同";
            break;
        case kXWServerTypeFindShop:
            serviceStr = @"找店合同";
            break;
        default:
            break;
    }
    self.orderItem.partner = kPartnerID;
    self.orderItem.seller = kSellerAccount;
    self.orderItem.tradeNO = dic[@"tradeNo"]; //订单ID(由商家自行制定)
    self.orderItem.productName = serviceStr; //商品标题
    self.orderItem.productDescription = @"开通服务后可以使用该服务"; //商品描述
    self.orderItem.amount = [NSString stringWithFormat:@"%.2f",0.01/*_price*/]; //商品价格
    self.orderItem.notifyURL = kNotifyURL; //回调URL
    
    self.orderItem.service = @"mobile.securitypay.pay";
    self.orderItem.paymentType = @"1";
    self.orderItem.inputCharset = @"utf-8";
    self.orderItem.itBPay = @"30m";
    self.orderItem.showUrl = @"m.alipay.com";
    
    //将商品信息拼接成字符串
    NSString *orderSpec = [self.orderItem description];
    DLog(@"orderSpec = %@",orderSpec);
    
    NSString *signedString = [self genSignedString:orderSpec withKey:kPrivateKey];//签名如果私钥和公钥配对不成功,会生成订单失败
    
    NSString *orderString = nil;
    if (signedString != nil) {
        orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"", orderSpec, signedString, @"RSA"];

        [[AlipaySDK defaultService] payOrder:orderString fromScheme:kAppScheme callback:^(NSDictionary *resultDic) {
            NSLog(@"reslut = %@",resultDic);
            
            NSDictionary *dict = (NSDictionary *)resultDic;
            NSString *resultStatus = [dict valueForKey:@"resultStatus"];
            
            if ([resultStatus isEqualToString:@"9000"]) {
                //成功
                [XWPrompt showPromptMessage:@"支付成功"];
                XWPaySuccessViewController *paySuccessVC = [[XWPaySuccessViewController alloc]init];
                paySuccessVC.payType = kPayWayTypeAlipay;
                paySuccessVC.servicetype = _serviceType;
                paySuccessVC.customerServiceDic = _customerServiceDic;
                [self.signPayVC.navigationController pushViewController:paySuccessVC animated:YES]
                ;
            }else if([resultStatus isEqualToString:@"6001"]){
                [XWPrompt showPromptMessage:@"用户取消支付"];
            }else{
                //支付成功,处理
                [XWPrompt showPromptMessage:@"订单支付失败"];
            }
            
        }];
    } else {
        [XWPrompt showPromptMessage:@"订单支付失败"];
    }

}

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

- (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);
        }];
    }
    if ([url.host isEqualToString:@"platformapi"]){//支付宝钱包快登授权返回authCode
  
        [[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
            //【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
            NSLog(@"result = %@",resultDic);
        }];
    }
    return YES;
}

基本上就这些了,如果不通,就看看有没有没有塞进去的包,依赖,路径,私钥公钥是否配对。

iOS支付宝支付总结

标签:

原文地址:http://www.cnblogs.com/yyzanll/p/4981070.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!