iOS 一個(gè)App多個(gè)微信商戶號(hào)支付

微信支付集成相關(guān)的東西我就不在這里復(fù)述了,網(wǎng)上一大堆文章,大家搜索一下按照步驟應(yīng)該都沒啥問(wèn)題,兩個(gè)商戶的回調(diào)處理我還沒做,有時(shí)間會(huì)更新,廢話不多說(shuō),直接開整

記得把2個(gè)商戶號(hào)都填寫到 URL Schemes中

1、在AppDelegation didFinishLaunchingWithOptions 中設(shè)置

1、注冊(cè)通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(wechatPayResigerNotifi:) name:@"wechatPayResiger" object:nil];


2、通知回調(diào)
#pragma mark  -------------- 微信注冊(cè)通知回調(diào)
- (void)wechatPayResigerNotifi:(NSNotification *)notifi
{
    NSDictionary *dict =notifi.userInfo;
    if ([dict[@"key"] intValue] == 1) {
        //.商戶1
        [WXApi registerApp:@"wxx124124xx1241412"];

    } else {
        //.商戶2
        [WXApi registerApp:@"wxx124124xx1242141"];
    }
}


2、在支付界面(或者自定義界面)中設(shè)置

dict中的參數(shù)是后臺(tái)返回的參數(shù)(商戶1,商戶2全都用這一個(gè)方法就可以)

[[NSNotificationCenter defaultCenter] postNotificationName:@"wechatPayResiger" object:@"" userInfo:@{@"key" : @"1"}];
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
dict[@"partnerId"] = @"1";
dict[@"prepayId"] = @"2";
dict[@"nonceStr"] = @"3";
dict[@"api_key"] = @"4";
dict[@"timeStamp"] = @"5";
dict[@"appId"] = @"6";
[self wxpay:dict];

3、因?yàn)楹笈_(tái)沒有進(jìn)行2次簽名,所以前天做了2次簽名,建議簽名全部由后臺(tái)做 ,我項(xiàng)目中是需要進(jìn)行2次簽名的,如果讀者不需要2次簽名,直接用后臺(tái)返回的參數(shù)調(diào)起微信就可以

 記得導(dǎo)入 #import <CommonCrypto/CommonDigest.h>
- (void)wxpay:(NSDictionary *)wechatDic {
    time_t now;
    time(&now);
    NSString *timestamp = [NSString stringWithFormat:@"%ld",now];
    NSString *noncestr = [self md5:timestamp];
    NSDictionary *dict = @{
                           @"appid":[wechatDic objectForKey:@"appId"],
                           @"noncestr":noncestr,
                           @"package":@"Sign=WXPay",
                           @"partnerid":[wechatDic objectForKey:@"partnerId"],
                           @"prepayid":[wechatDic objectForKey:@"prepayId"],
                           @"timestamp":timestamp
                           };
    NSMutableString *contentString = [NSMutableString string];
    NSArray *keys = [dict allKeys];
    // 按照ASCII 碼排序
    NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
        return [obj1 compare:obj2 options:NSNumericSearch];
    }];
    // 拼接字符串
    for (NSString *categoryId in sortedArray) {
        if (![[dict objectForKey:categoryId] isEqualToString:@""]&&![[dict objectForKey:categoryId] isEqualToString:@"key"]&&![[dict objectForKey:categoryId] isEqualToString:@"sign"]) {
            [contentString appendFormat:@"%@=%@&",categoryId,dict[categoryId]];
        }
    }
    
    // 添加商戶key字段
    NSString *secretkey = [wechatDic objectForKey:@"api_key"];
    [contentString appendFormat:@"key=%@",secretkey];
    // 加密
    NSString *md5Sign = [self md5:contentString];
    // 支付數(shù)據(jù)
    PayReq *req = [[PayReq alloc] init];
    req.openID = [wechatDic objectForKey:@"appId"];
    req.partnerId = [wechatDic objectForKey:@"partnerId"];
    req.prepayId = [wechatDic objectForKey:@"prepayId"];
    req.package = @"Sign=WXPay";
    req.nonceStr = noncestr;
    req.timeStamp = [timestamp intValue];
    req.sign = md5Sign;
    [WXApi sendReq:req];
}

- (NSString *)md5:(NSString *)str {
    const char *cStr = [str UTF8String];
    unsigned char digest[CC_MD5_DIGEST_LENGTH];
    CC_MD5(cStr,(unsigned int)strlen(cStr),digest);
    NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
    for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i ++) {
        [output appendFormat:@"%02X",digest[i]];
    }
    return output;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容