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="}

posted on 2016-02-25 15:28  崔付亮  阅读(1300)  评论(1编辑  收藏  举报