zoukankan      html  css  js  c++  java
  • iOS支付宝支付,,,实现步骤及注意事项

    注意点:
    1.添加URL Types 中添加
    2.添加白名单 ,要不就调不到支付宝中
     
    //过程
    #warning 1.生成预支付订单信息
    要获得partner  seller  私钥   这些东西为了保证安全,最好存到服务端.
     appScheme,, notifyURL 处理
     
    #warning 2.将订单信息用私钥进行签名
    订单的生成也最好在服务端生成
     
    #warning 3.调用支付宝SDK发送请求数据
    有两个同步,异步通知..两个通知的处理方式相同.(应用程序跳转到支付宝后,我们的程序很可能会被系统kill掉.所以有两个通知) 
     
    #warning 4.对支付回调的结果进行验证(这一步加上是确保数据的安全,不加不影响支付)
    回调的验证如下(支付宝demol中没有)
     
     
    私钥 进行签名
     返回的结果需要用公钥进行验证
     
    //支付状态验证 用SBJson 
    [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
            // 用SBJSON 或者 JSONKit 将回调信息(字典)转成字符串
            SBJSON *sbJson = [[SBJSON alloc] init];
            NSString *resultDicToString = [sbJson stringWithObject:resultDic error:nil];
            [self paymentResult:resultDicToString];
            NSLog(@"回调结果reslut = %@",resultDic);
            //            NSLog(@"%d%@", [[resultDic objectForKey:@"resultStatus"] intValue], [resultDic objectForKey:@"memo"]);
      }];
     
    - (void)paymentResult:(NSString *)resultDicToString
    {
        //结果处理
        AlixPayResult *result = [[AlixPayResult alloc] initWithString:resultDicToString];
        if (result)
        {
            /**
             * 状态码
             * 9000 订单支付成功
             * 8000 正在处理中
             * 4000 订单支付失败
             * 6001 用户中途取消
             * 6002 网络连接出错
             */
            if (result.statusCode == 9000)
            {
                /**
                 *用公钥验证签名 严格验证请使用result.resultString与result.signString验签
                 */
                // 交易成功
                NSString* key = AlipayPublicKey;
                id<DataVerifier> verifier;
                verifier = CreateRSADataVerifier(key);
                // 参数1:订单信息
                // 参数2:签名值
                /**< resultString.订单信息以及验证签名信息*/
                /*如果你不想做签名验证,那这个字段可以忽略了*/
                if ([verifier verifyString:result.resultString withSign:result.signString])
                {
                    // 验证签名成功,交易结果无篡改
                    NSLog(@"支付成功!");
                } else {
                    NSLog(@"此单被篡改无效!!");
                }
            }
            else
            {
                // 支付失败
                NSLog(@"%d%@", result.statusCode, result.statusMessage);
            }
        }
        else
        {
            // 支付失败
            NSLog(@"支付失败!");
        }
    }
     
     
     
     
     
     
     
    3.测试点
    返回结果需要通过 resultStatus 以及 result 字段的值来综合判断并确定支付结果。 在 resultStatus=9000,并且 success="true"以及 sign="xxx"校验通过的情况下,证 明支付成功。其它情况归为失败。较低安全级别的场合,也可以只通过检查 resultStatus 以及 success="true"来判定支付结果。以下为订单支付成功的完成信 息示例:

    ResultStatus={9000};memo={};result={partner="2088101568358171"&seller_id= "xxx@alipay.com"&out_trade_no="0819145412-6177"&subject=" 测 试 "&body=" 测 试

    测试

     
    "&total_fee="0.01"&notify_url="http://notify.msp.hk/notify.htm"&service=" mobile.securitypay.pay"&payment_type="1"&_input_charset="utf-8"&it_b_pay= "30m"&success="true"&sign_type="RSA"&sign="hkFZr+zE9499nuqDNLZEF7W75RFFPs ly876QuRSeN8WMaUgcdR00IKy5ZyBJ4eldhoJ/2zghqrD4E2G2mNjs3aE+HCLiBXrPDNdLKCZ gSOIqmv46TfPTEqopYfhs+o5fZzXxt34fwdrzN4mX6S13cr3UwmEV4L3Ffir/02RBVtU="}
  • 相关阅读:
    sqlhelper使用指南
    大三学长带我学习JAVA。作业1. 第1讲.Java.SE入门、JDK的下载与安装、第一个Java程序、Java程序的编译与执行 大三学长带我学习JAVA。作业1.
    pku1201 Intervals
    hdu 1364 king
    pku 3268 Silver Cow Party
    pku 3169 Layout
    hdu 2680 Choose the best route
    hdu 2983
    pku 1716 Integer Intervals
    pku 2387 Til the Cows Come Home
  • 原文地址:https://www.cnblogs.com/cfl911014/p/5217149.html
Copyright © 2011-2022 走看看