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="}
  • 相关阅读:
    算法导论(第三版)Exercises2.1(插入排序、线性查找、N位大数相加)
    含铝馒头可能损伤儿童的智力
    每秒3600乘以100等于36万次售票解决方案
    namespace Measure
    public interface ICloneable
    VB.net 与线程
    C#调用VP 包含素材
    C# 定时器 一个简单 并且可以直接运行的Demo
    松下 激光位移传感器 API
    在Win7系统下, 使用VS2015 打开带有日文注释程序出现乱码的解决方案
  • 原文地址:https://www.cnblogs.com/cfl911014/p/5217149.html
Copyright © 2011-2022 走看看