KWMPayUtil.m 6.76 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
//
//  KWMPayUtil.m
//  iCemarose
//
//  Created by HouWeiBin on 2017/6/15.
//  Copyright © 2017年 kollway. All rights reserved.
//

#import "KWMPayUtil.h"
#import "KWMStringUtil.h"

@implementation KWMPayUtil

+(NSString *)payTypeString:(KWMPayType)payType{
    NSString *payTypeString = @"";
    switch (payType) {
        case TypeNone:
            payTypeString = @"请选择一种付款方式";
            break;
        case TypeCredit:
            payTypeString = @"信用卡支付";
            break;
        case TypeWechatPay:
            payTypeString = @"微信支付";
            break;
        case TypeAlipay:
            payTypeString = @"支付宝支付";
            break;
houweibin committed
29 30
        case TypeWebpay:
            payTypeString = @"网页支付";
31 32 33 34 35 36
    }
    return payTypeString;
}

+(NSDictionary *)wechatPayParameters:(BUYCheckout *)checkout{
    //这是测试商店的单,先用来测试
u  
lee committed
37
#if DEBUG
houweibin committed
38 39
    NSString *checkout_token = checkout.token;
    NSString *total_price = [NSString stringWithFormat:@"%.2f",checkout.totalPrice.floatValue];
40
    //先写test,后面改成正式的订单描述
u  
lee committed
41 42
#else
    NSString *checkout_token = checkout.token;
houweibin committed
43
    //需要保留小数点后两位(包括小数点后的.00),以保持与后台一致,从而验证通过
houweibin committed
44
    NSString *total_price = [NSString stringWithFormat:@"%.2f",checkout.totalPrice.floatValue];
u  
lee committed
45 46
#endif
    NSString *ip_address = @"127.0.0.1";
u  
lee committed
47 48
    NSString *before_sign = [NSString stringWithFormat:@"checkout_token=%@&ip_address=%@&total_price=%@&key=%@",
                             checkout_token,ip_address,total_price,User_Pay_KEY];
49 50 51 52 53 54 55 56 57 58 59 60 61 62
    NSString *base64String = [KWMStringUtil BASE64:before_sign];
    NSString *sign = [KWMStringUtil MD5:base64String];
    
    NSDictionary *parameters = @{
                                 @"ip_address":ip_address,
                                 @"checkout_token":checkout_token,
                                 @"total_price":total_price,
                                 @"sign":sign
                                 };
    return parameters;
}

+(NSDictionary *)aliPayParameters:(BUYCheckout *)checkout{
    //这是测试商店的单,先用来测试
u  
lee committed
63
#if DEBUG
houweibin committed
64 65
    NSString *checkout_token = checkout.token;
    NSString *total_price = [NSString stringWithFormat:@"%.2f",checkout.totalPrice.floatValue];
u  
lee committed
66 67
#else
    NSString *checkout_token = checkout.token;
houweibin committed
68
    //需要保留小数点后两位(包括小数点后的.00),以保持与后台一致,从而验证通过
houweibin committed
69
    NSString *total_price = [NSString stringWithFormat:@"%.2f",checkout.totalPrice.floatValue];
u  
lee committed
70
#endif
u  
lee committed
71 72
    NSString *before_sign = [NSString stringWithFormat:@"checkout_token=%@&total_price=%@&key=%@",
                             checkout_token,total_price,User_Pay_KEY];
73 74 75 76 77 78 79 80 81 82 83
    NSString *base64String = [KWMStringUtil BASE64:before_sign];
    NSString *sign = [KWMStringUtil MD5:base64String];
    
    NSDictionary *parameters = @{
                                 @"checkout_token":checkout_token,
                                 @"total_price":total_price,
                                 @"sign":sign
                                 };
    return parameters;
}

84 85
//微信支付后直接切换回到APP会调用此方法
+(NSDictionary *)payResultParameters:(BUYCheckout *)checkout tradeNo:(NSString *)tradeNo{
houweibin committed
86 87 88 89 90
#if DEBUG
    NSString *checkout_token = checkout.token;
#else
    NSString *checkout_token = checkout.token;
#endif
91 92 93
    NSString *out_trade_no = tradeNo?:@"";
    NSString *before_sign = [NSString stringWithFormat:@"checkout_token=%@&out_trade_no=%@&key=%@",
                             checkout_token,out_trade_no,User_Pay_KEY];
houweibin committed
94 95 96 97
    NSString *base64String = [KWMStringUtil BASE64:before_sign];
    NSString *sign = [KWMStringUtil MD5:base64String];
    NSDictionary *parameters = @{
                                 @"checkout_token":checkout_token,
98
                                 @"out_trade_no":out_trade_no,
houweibin committed
99 100 101 102 103
                                 @"sign":sign
                                 };
    return parameters;
}

104 105 106 107 108 109 110 111
+(void)weChatPay:(KWMWechatPayData *)wechatData{
    if(wechatData){
        PayReq *request = [[PayReq alloc] init];
        request.openID = wechatData.appid;
        request.partnerId = wechatData.partnerid;
        request.prepayId= wechatData.prepayid;
        request.package = wechatData.package;
        request.nonceStr= wechatData.noncestr;
u  
lee committed
112
        request.timeStamp= (UInt32)wechatData.timestamp;
113 114 115 116 117 118 119 120 121 122 123 124
        request.sign= wechatData.sign;
        [WXApi sendReq:request];
    }
}

+(void)aliPay:(NSString *)alipayData callback:(CompletionBlock)callback{
    if(![KWMStringUtil isEmpty:alipayData]){
        NSString *appScheme = @"iCemarose";
        [[AlipaySDK defaultService] payOrder:alipayData fromScheme:appScheme callback:callback];
    }
}

houweibin committed
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
/*
|code|int|1000|正常响应|
|code|int|1001|订单检索失败,未找到相应的订单数据|
|code|int|1002|请求的总金额与订单中不一致|
|code|int|1003|货币转换失败|
|code|int|1004|服务器端未开通店铺|
|code|int|1005|支付网关参数未设置|
|code|int|1006|订单已支付完成|
|code|int|1007|签名验证失败|
|code|int|1008|订单查询失败|
|code|int|1009|订单创建失败|
|code|int|1010|必要参数缺失|
|code|int|1012|商品数量不足|
 */
+(NSString *)payErrorMessage:(BUYCheckout *)checkout errorResult:(KWMCheckoutPayResult *)errorResult{
    if(!errorResult){
        return @"";
    }
    if(errorResult.code){
        switch (errorResult.code.integerValue) {
            case 1000:
                return @"";
            case 1001:
                return @"订单检索失败,未找到相应的订单数据";
            case 1002:
                return @"请求的总金额与订单中不一致";
            case 1003:
                return @"货币转换失败";
            case 1004:
                return @"服务器端未开通店铺";
            case 1005:
                return @"支付网关参数未设置";
            case 1006:
                return @"订单已支付完成";
            case 1007:
                return @"签名验证失败";
            case 1008:
                return @"订单查询失败";
            case 1009:
                return @"订单创建失败";
            case 1010:
                return @"必要参数缺失";
            case 1012:
                if(!(checkout && errorResult.variantId) ){
                    return @"";
                }
                for(BUYCartLineItem *item in checkout.lineItemsArray){
                    if([item.variantId isEqualToNumber:errorResult.variantId]){
                        NSString *message = [NSString stringWithFormat:@"商品“%@/%@”数量不足",item.title,item.variantTitle];
                        return message;
                    }
                }
                return @"商品数量不足";
        }
    }
    return @"";
}


184
@end