111

#import "CDVAlipayBase.h"


#import <AlipaySDK/AlipaySDK.h>


@interface CDVAlipayBase()
@property NSString* aliPID;
@property NSString* currentCallbackId;
@end


@implementation CDVAlipayBase


@synthesize aliPID, currentCallbackId;


-(void)pluginInitialize
{
    self.aliPID = [[self.commandDelegate settings] objectForKey:@"ali_pid"];
}




- (void) pay:(CDVInvokedUrlCommand*)command
{
    //初始化 currentCallbackId .
    [self prepareForExec:command];


    if ([aliPID length] == 0)
    {
        CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"支付PID错误"];
        [self.commandDelegate sendPluginResult:commandResult callbackId:command.callbackId];
        return;
    }


    //从参数中合成paymentString,绝不能把private_key放在客户端中,阿里给的例子太有误导性,新手很容易图简单直接拿来用,殊不知危险性有多高。为了保证安全性,支付字符串需要从服务端合成。
    //NSMutableDictionary *args = [command argumentAtIndex:0];


    //For the client-server based payment, the signed content must be extractly same. In other
    // words, the order of properties matters on both both sides.
    //NSArray *sortedKeys = [args.allKeys sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES]]];


    //NSMutableString * orderString = [NSMutableString string];
    //Let's remove the sign and sign_type properties first
    //for (NSString * key in sortedKeys) {
    //    if ([@"sign" isEqualToString:key] || [@"sign_type" isEqualToString:key]) continue;
    //    [orderString appendFormat:@"%@=\"%@\"&", key, [args objectForKey:key]];
    //}


    //[orderString appendFormat:@"%@=\"%@\"&", @"sign", [args objectForKey:@"sign"]];
    //[orderString appendFormat:@"%@=\"%@\"&", @"sign_type", [args objectForKey:@"sign_type"]];
    //[orderString deleteCharactersInRange:NSMakeRange([orderString length] -1, 1)];


    NSMutableString * orderString = [command argumentAtIndex:0];


    NSMutableString * schema = [NSMutableString string];
    [schema appendFormat:@"ALI%@", self.aliPID];


    [[AlipaySDK defaultService] payOrder:orderString fromScheme:schema callback:^(NSDictionary *resultDic) {
        dispatch_async(dispatch_get_main_queue(), ^{
            self.currentCallbackId = nil;
            CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:resultDic];
            [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
        });
    }];
}


//初始化 callbackId
-(void) prepareForExec:(CDVInvokedUrlCommand *)command{
    self.currentCallbackId = command.callbackId;


}




- (void)handleOpenURL:(NSNotification *)notification
{
    NSURL* url = [notification object];


    if ([url.scheme rangeOfString:self.aliPID].length > 0 && currentCallbackId != nil)
    {
        //跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            dispatch_async(dispatch_get_main_queue(), ^{
                CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:resultDic];
                [self.commandDelegate sendPluginResult:pluginResult callbackId:currentCallbackId];
                currentCallbackId = nil;
            });
        }];
    }
}


@end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值