Commit 1a2ab587e5ba83d032da3ec6b22104456c909d3e

Authored by yanglingyu
1 parent 7e9ce9d0

no message

CNLiveBBASMModule.podspec
... ... @@ -32,7 +32,8 @@ TODO: Add long description of the pod here.
32 32  
33 33 s.vendored_libraries = ['CNLiveBBASMModule/Classes/CNLibrary/**/libs/*']
34 34 s.source_files = ['CNLiveBBASMModule/Classes/CNLiveBBASMImpl/**/*',
35   - 'CNLiveBBASMModule/Classes/CNBBASATool/**/*']
  35 + 'CNLiveBBASMModule/Classes/CNBBASATool/**/*',
  36 + 'CNLiveBBASMModule/Classes/CNFrameworks/*.framework/Headers/*']
36 37 s.vendored_frameworks = ['CNLiveBBASMModule/Classes/CNFrameworks/BaiduWallet_Portal.framework',
37 38 'CNLiveBBASMModule/Classes/CNFrameworks/BainuoCashierSDK.framework']
38 39 s.static_framework = true
... ...
Example/CNLiveBBASMModule/CNLiveBBASMModule/CNLiveBainuoPay/CNBBASMPaymentHander.h deleted 100644 → 0
1   -//
2   -// CNBBASMPaymentHander.h
3   -// BBASMDemo
4   -//
5   -// Created by CNLive on 2021/10/29.
6   -//
7   -
8   -#import <Foundation/Foundation.h>
9   -#import <AlipaySDK/AlipaySDK.h>
10   -
11   -NS_ASSUME_NONNULL_BEGIN
12   -
13   -@interface CNBBASMPaymentHander : NSObject
14   -// 新支付回调信息,返回data更多数据
15   -typedef void(^BBASMCashierPaymentCallBack)(NSString *payDesc, NSDictionary *data);
16   -
17   -+ (instancetype)shareInstance;
18   -
19   -/**
20   - * @brief 新版调起糯米聚合支付收银台 API,支持支付数据data回传
21   - * @param params 订单信息
22   - * @param bannedChannels 屏蔽的支付渠道
23   - * @param successCallBack 成功回调,参数为描述信息
24   - * @param loadingCallBack 支付中回调,参数为描述信息
25   - * @param errorCallBack 失败回调,参数为描述信息
26   - * @param cancelCallBack 取消回调,参数为描述信息
27   - */
28   -- (void)requestBainuoCashierPayment:(NSDictionary *)params
29   - bannedChannels:(NSArray *)bannedChannels
30   - successCallBack:(BBASMCashierPaymentCallBack)successCallBack
31   - loadingCallBack:(BBASMCashierPaymentCallBack)loadingCallBack
32   - errorCallBack:(BBASMCashierPaymentCallBack)errorCallBack
33   - cancelCallBack:(BBASMCashierPaymentCallBack)cancelCallBack;
34   -/**
35   - * @brief 糯米聚合收银台支付渠道信息(含支付渠道列表、优惠券列表)
36   - *
37   - * @param params 调起参数
38   - * @param completionBlock 回调
39   - */
40   -- (void)requestBainuoPolymerPaymentChannelInfoWithParams:(NSDictionary *)params
41   - completion:(void (^)(NSDictionary *_Nullable, NSError *_Nullable))completionBlock;
42   -
43   -/**
44   - * @brief 糯米聚合收银台算价接口
45   - *
46   - * @param params 调起参数
47   - * @param completionBlock 回调
48   - */
49   -- (void)calculateBainuoPolymerPaymentPriceWithParams:(NSDictionary *)params
50   - completion:(void (^)(NSDictionary *_Nullable, NSError *_Nullable))completionBlock;
51   -
52   -/**
53   - * @brief 展示糯米聚合支付收银台优惠券面板
54   - * @param params 展示所需参数
55   - * @param fromViewController 承接面板展示的vc
56   - * @param callback callback
57   - */
58   -- (void)showBainuoCashierCouponPannel:(NSDictionary *)params
59   - fromViewController:(UIViewController *)fromViewController
60   - callback:(void (^)(NSDictionary * _Nonnull))callback;
61   -
62   -@end
63   -
64   -NS_ASSUME_NONNULL_END
Example/CNLiveBBASMModule/CNLiveBBASMModule/CNLiveBainuoPay/CNBBASMPaymentHander.m deleted 100644 → 0
1   -//
2   -// CNBBASMPaymentHander.m
3   -// BBASMDemo
4   -//
5   -// Created by CNLive on 2021/10/29.
6   -//
7   -
8   -#import "CNBBASMPaymentHander.h"
9   -#import <BainuoCashierSDK/BDNCashierSDK.h>
10   -#import <BainuoCashierSDK/BDNCashierSDKAlipayService.h>
11   -#import <BainuoCashierSDK/BDNCashierSDKWechatService.h>
12   -#import <BainuoCashierSDK/BDNCashierSDKBaifubaoService.h>
13   -#import <CNLiveEnvironment/CNLiveEnvironment.h>
14   -#import "CNBainuoPayManagerDelegate.h"
15   -
16   -static NSString * const CNPAY_WEICHAT_PAY_SCHEME = @"cnlive.baidu.com://";
17   -@implementation CNBBASMPaymentHander
18   -+ (instancetype)shareInstance
19   -{
20   - static dispatch_once_t onceToken;
21   - static CNBBASMPaymentHander *hander = nil;
22   - dispatch_once(&onceToken, ^{
23   - hander = [[self alloc] init];
24   - [hander registerPayment];
25   - });
26   - return hander;
27   -}
28   -
29   -- (void )registerPayment{
30   - // 按需实现和注册支付能力(收银台SDK提供了微信、支付宝、百付宝的支付能力的默认实现)
31   - [BDNCashierSDK registerPaymentServices:@[[BDNCashierSDKAlipayService defaultService],[BDNCashierSDKWechatService defaultService],[BDNCashierSDKBaifubaoService defaultService]]];
32   - // 使用收银台提供的支付宝支付能力时,需要注册对应Scheme
33   - [[BDNCashierSDKAlipayService defaultService] registerScheme:@"cnlive"];
34   - // 使用收银台提供的微信支付能力时,需要注册对应的宿主App的universalLink
35   - [[BDNCashierSDKWechatService defaultService] registerUniversalLink:[NSString stringWithFormat:@"%@/",API_Host]];
36   - // 使用收银台提供的百付宝支付能力时,需要注册实现BDNCashierSDKBaifubaoDelegate协议的代理类
37   - [[BDNCashierSDKBaifubaoService defaultService] registerDelegate:[CNBainuoPayManagerDelegate shareInstance]];
38   -}
39   -
40   --(void)requestBainuoCashierPayment:(NSDictionary *)params bannedChannels:(NSArray *)bannedChannels successCallBack:(BBASMCashierPaymentCallBack)successCallBack loadingCallBack:(BBASMCashierPaymentCallBack)loadingCallBack errorCallBack:(BBASMCashierPaymentCallBack)errorCallBack cancelCallBack:(BBASMCashierPaymentCallBack)cancelCallBack{
41   - [self doBainuoCashierPayment:params bannedChannels:bannedChannels callback:^(NSDictionary *info) {
42   - // 支付渠道响应结果
43   - NSNumber *resultCode = info[BDNCashierPaymentRespCodeKey];
44   - NSString *payDesc = info[BDNCashierPaymentRespMsgKey];
45   - NSDictionary *data = info[BDNCashierPaymentRespDataKey];
46   - switch (resultCode.integerValue) {
47   - case BDNCashierPaymentRespCodeSucceeded:
48   - {
49   - successCallBack(payDesc, data);
50   - break;
51   - }
52   - case BDNCashierPaymentRespCodeLoading:
53   - {
54   - loadingCallBack(payDesc, data);
55   - break;
56   - }
57   - case BDNCashierPaymentRespCodeCanceled:{
58   - cancelCallBack(payDesc, data);
59   - break;
60   - }
61   - case BDNCashierPaymentRespCodeFailed:{
62   - errorCallBack(payDesc, data);
63   - break;
64   - }
65   -
66   - default:
67   - break;
68   - }
69   - }];
70   -}
71   -- (void)doBainuoCashierPayment:(NSDictionary *)params
72   - bannedChannels:(NSArray *)bannedChannels
73   - callback:(void (^)(NSDictionary *info))callback{
74   - BDNCashierDealReq *dealReq = [[BDNCashierDealReq alloc] init];
75   - dealReq.params = params;
76   - dealReq.bannedChannels = bannedChannels;
77   - dealReq.schemeForWechatH5Pay = CNPAY_WEICHAT_PAY_SCHEME;
78   - dealReq.completion = ^(NSDictionary *info) {
79   - callback ? callback(info) : nil;
80   - };
81   - // 调起收银台
82   - [BDNCashierSDK showCashierDesk:dealReq];
83   -}
84   -
85   --(void)requestBainuoPolymerPaymentChannelInfoWithParams:(NSDictionary *)params completion:(void (^)(NSDictionary * _Nullable, NSError * _Nullable))completionBlock
86   -{
87   - [BDNCashierSDK requestChannelInfoWithParams:params responseBlock:^(NSDictionary *response) {
88   - completionBlock ? completionBlock(response, nil) : nil;
89   - } failedBlock:^(NSError *error) {
90   - completionBlock ? completionBlock (nil, error) : nil;
91   - }];
92   -}
93   -- (void)calculateBainuoPolymerPaymentPriceWithParams:(NSDictionary *)params
94   - completion:(void (^)(NSDictionary *_Nullable, NSError *_Nullable))completionBlock{
95   - [BDNCashierSDK calculatePriceWithParams:params responseBlock:^(NSDictionary *response) {
96   - completionBlock ? completionBlock(response, nil) : nil;
97   - } failedBlock:^(NSError *error) {
98   - completionBlock ? completionBlock(nil, error) : nil;
99   - }];
100   -}
101   -- (void)showBainuoCashierCouponPannel:(NSDictionary *)params
102   - fromViewController:(UIViewController *)fromViewController
103   - callback:(void (^)(NSDictionary * _Nonnull))callback{
104   - BDNCashierCouponReq *req = [BDNCashierCouponReq new];
105   - req.params = params;
106   - req.fromViewController = fromViewController;
107   - req.completion = ^(NSDictionary *info) {
108   - callback ? callback(info) : nil;
109   - };
110   - [BDNCashierSDK showCashierCoupon:req];
111   -}
112   -@end
Example/CNLiveBBASMModule/CNLiveBBASMModule/CNLiveBainuoPay/CNBBASMPaymentImpl.h deleted 100644 → 0
1   -//
2   -// CNBBASMPaymentImpl.h
3   -// CNLiveNetAdd
4   -//
5   -// Created by CNLive on 2021/10/16.
6   -// Copyright © 2021 cnlive. All rights reserved.
7   -//
8   -
9   -#import <BBAMNP/BBAMNP.h>
10   -
11   -NS_ASSUME_NONNULL_BEGIN
12   -
13   -@interface CNBBASMPaymentImpl : BBASMAdapterBaseImplement<BBASMPaymentAdapterProtocol>
14   -
15   -@end
16   -
17   -NS_ASSUME_NONNULL_END
Example/CNLiveBBASMModule/CNLiveBBASMModule/CNLiveBainuoPay/CNBBASMPaymentImpl.m deleted 100644 → 0
1   -//
2   -// CNBBASMPaymentImpl.m
3   -// CNLiveNetAdd
4   -//
5   -// Created by CNLive on 2021/10/16.
6   -// Copyright © 2021 cnlive. All rights reserved.
7   -//
8   -
9   -#import "CNBBASMPaymentImpl.h"
10   -
11   -/**
12   - * 小程序统计支付
13   - */
14   -typedef NS_ENUM(NSInteger, BBASMPayStatisticsType) {
15   - BBASMPayStatisticsAliPay = 0, //支付宝直连
16   - BBASMPayStatisticsPolymer = 1, //聚合收银台
17   - BBASMPayStatisticsBDWallet = 2, //百度钱包
18   - BBASMPayStatisticsWechat = 3, //微信端能力调用
19   -};
20   -@implementation CNBBASMPaymentImpl
21   -RegisterBBASMAdapter()
22   -
23   -+ (void)calculateBainuoPolymerPaymentPriceWithParams:(nonnull NSDictionary *)params completion:(nonnull void (^)(NSDictionary * _Nonnull, NSError * _Nonnull))completionBlock {
24   - [[CNBBASMPaymentHander shareInstance] calculateBainuoPolymerPaymentPriceWithParams:params completion:completionBlock];
25   -}
26   -
27   -
28   -+ (void)requestBainuoPolymerPaymentChannelInfoWithParams:(nonnull NSDictionary *)params completion:(nonnull void (^)(NSDictionary * _Nonnull, NSError * _Nonnull))completionBlock {
29   - [[CNBBASMPaymentHander shareInstance] requestBainuoPolymerPaymentChannelInfoWithParams:params completion:completionBlock];
30   -}
31   -
32   -
33   -+ (void)requestBainuoPolymerPaymentWithParams:(nonnull NSDictionary *)params bannedChannels:(nullable NSArray *)bannedChannels detailResultCallback:(nonnull void (^)(BBASMPaymentStatus, NSString * _Nonnull, NSDictionary * _Nonnull))detailResultCallback {
34   - [[CNBBASMPaymentHander shareInstance] requestBainuoCashierPayment:[params copy]
35   - bannedChannels:bannedChannels
36   - successCallBack:^(NSString *payDesc, NSDictionary *data) {
37   - detailResultCallback(BBASMPaymentStatusSuccess, payDesc, data);
38   - [self cnPaymentUbcPayStatisticstype:BBASMPayStatisticsPolymer
39   - payInfo:payDesc
40   - succeed:YES];
41   - } loadingCallBack:^(NSString *payDesc, NSDictionary *data) {
42   - detailResultCallback(BBASMPaymentStatusLoading, payDesc, data);
43   - } errorCallBack:^(NSString *payDesc, NSDictionary *data) {
44   - detailResultCallback(BBASMPaymentStatusFailed, payDesc, data);
45   - [self cnPaymentUbcPayStatisticstype:BBASMPayStatisticsPolymer
46   - payInfo:payDesc
47   - succeed:NO];
48   - } cancelCallBack:^(NSString *payDesc, NSDictionary *data) {
49   - detailResultCallback(BBASMPaymentStatusCanceled, payDesc, data);
50   - [self cnPaymentUbcPayStatisticstype:BBASMPayStatisticsPolymer
51   - payInfo:payDesc
52   - succeed:NO];
53   - }];
54   -}
55   -
56   -
57   -+ (void)requestPaymentWithType:(BBASMPaymentType)type orderInfo:(nonnull NSString *)orderInfo completion:(nonnull void (^)(BBASMPaymentStatus, NSDictionary * _Nonnull))completion {
58   -
59   -}
60   -
61   -
62   -+ (void)requestWalletRiskInfo:(nonnull NSString *)parameter source:(nonnull NSString *)source controller:(nonnull UIViewController *)controller completion:(nonnull void (^)(NSInteger, NSString * _Nonnull))completion {
63   -
64   -}
65   -
66   -
67   -+ (void)showBainuoCashierCouponPannel:(nonnull NSDictionary *)params fromViewController:(nonnull UIViewController *)fromViewController callback:(nonnull void (^)(NSDictionary * _Nonnull))callback {
68   - [[CNBBASMPaymentHander shareInstance] showBainuoCashierCouponPannel:params fromViewController:fromViewController callback:callback];
69   -}
70   -
71   -+ (void)requestBainuoPolymerPaymentWithParams:(NSDictionary *)params
72   - bannedChannels:(nullable NSArray *)bannedChannels
73   - completion:(void (^)(BBASMPaymentStatus status, NSString *payResult))completionBlock{
74   - [[CNBBASMPaymentHander shareInstance] requestBainuoCashierPayment:[params copy] bannedChannels:bannedChannels successCallBack:^(NSString * _Nonnull payDesc, NSDictionary * _Nonnull data) {
75   - completionBlock(BBASMPaymentStatusSuccess, payDesc);
76   - [self cnPaymentUbcPayStatisticstype:BBASMPayStatisticsPolymer
77   - payInfo:payDesc
78   - succeed:YES];
79   - } loadingCallBack:^(NSString * _Nonnull payDesc, NSDictionary * _Nonnull data) {
80   - completionBlock(BBASMPaymentStatusLoading, payDesc);
81   - } errorCallBack:^(NSString * _Nonnull payDesc, NSDictionary * _Nonnull data) {
82   - completionBlock(BBASMPaymentStatusFailed, payDesc);
83   - [self cnPaymentUbcPayStatisticstype:BBASMPayStatisticsPolymer
84   - payInfo:payDesc
85   - succeed:NO];
86   - } cancelCallBack:^(NSString * _Nonnull payDesc, NSDictionary * _Nonnull data) {
87   - completionBlock(BBASMPaymentStatusCanceled, payDesc);
88   - [self cnPaymentUbcPayStatisticstype:BBASMPayStatisticsPolymer
89   - payInfo:payDesc
90   - succeed:NO];
91   - }];
92   -}
93   -
94   -
95   -#pragma mark - Private Method
96   -
97   -/**
98   - * @brief 统计小程序带来的订单量和支付成功的订单金额
99   - *
100   - * @param type 区分支付方式:支付宝-直连,聚合收银台,百度钱包
101   - * @param payInfo 支付结果信息字符串
102   - * @param succeed 支付成功失败
103   - */
104   -+ (void)cnPaymentUbcPayStatisticstype:(BBASMPayStatisticsType)type payInfo:(NSString *)payInfo succeed:(BOOL)succeed {
105   - NSString *value = succeed? @"success" : @"fail";
106   - Class<BBASMServiceProtocol> serviceClass = [Pyramid createClassService:@protocol(BBASMServiceProtocol)];
107   - NSString *appKey = [serviceClass currentBBASMAppId];
108   - NSString *moneyInfo = payInfo;
109   - if (!CHECK_STRING_VALID(moneyInfo)) {
110   - moneyInfo = @"";
111   - }
112   - if (!CHECK_STRING_VALID(appKey)) {
113   - appKey = @"";
114   - }
115   - // 支付方式
116   - NSString *source = @"";
117   - switch (type) {
118   - case BBASMPayStatisticsBDWallet:{
119   - source = @"baiduqianbao";
120   - break;
121   - }
122   - case BBASMPayStatisticsAliPay:{
123   - source = @"alipay";
124   - break;
125   - }
126   - case BBASMPayStatisticsPolymer:{
127   - source = @"nuomi";
128   - } break;
129   - case BBASMPayStatisticsWechat:{
130   - source = @"wechatH5Action";
131   - break;
132   - }
133   - default:
134   - source = @"baiduqianbao";
135   - break;
136   - }
137   - if (CHECK_STRING_VALID(appKey)) {
138   - Class<BBASMServiceProtocol> serviceClass = [Pyramid createClassService:@protocol(BBASMServiceProtocol)];
139   - NSString *appTypeString = [serviceClass appTypeString:appKey];
140   - if (!appTypeString || [appTypeString isEqualToString:@"unknown"]) {
141   - return;
142   - }
143   - NSDictionary *ubcDict = @{@"type": @"pay",
144   - @"from": appTypeString,
145   - @"value": value,
146   - @"source": source,
147   - @"ext": @{@"appid": appKey, @"money": moneyInfo,@"source" : BBASM_LOWERCASE_STR}};
148   - [serviceClass sendWalletUBCMessage:ubcDict
149   - appId:appKey];
150   - }
151   -}
152   -
153   -
154   -@end
Example/CNLiveBBASMModule/CNLiveBBASMModule/CNLiveBainuoPay/CNBainuoPayManagerDelegate.h deleted 100644 → 0
1   -//
2   -// CNBainuoPayManagerDelegate.h
3   -// BBASMDemo_Example
4   -//
5   -// Created by CNLive on 2021/10/29.
6   -// Copyright © 2021 杨苓玉. All rights reserved.
7   -//
8   -
9   -#import <Foundation/Foundation.h>
10   -#import "BainuoCashierSDK/BDNCashierSDK.h"
11   -#import <BainuoCashierSDK/BDNCashierSDKBaifubaoService.h>
12   -
13   -NS_ASSUME_NONNULL_BEGIN
14   -
15   -@interface CNBainuoPayManagerDelegate : NSObject<BDNCashierSDKBaifubaoDelegate>
16   -
17   -+ (instancetype)shareInstance;
18   -@end
19   -
20   -NS_ASSUME_NONNULL_END
Example/CNLiveBBASMModule/CNLiveBBASMModule/CNLiveBainuoPay/CNBainuoPayManagerDelegate.m deleted 100644 → 0
1   -//
2   -// CNBainuoPayManagerDelegate.m
3   -// BBASMDemo_Example
4   -//
5   -// Created by CNLive on 2021/10/29.
6   -// Copyright © 2021 杨苓玉. All rights reserved.
7   -//
8   -
9   -#import "CNBainuoPayManagerDelegate.h"
10   -#import "CNWalletPaymentDelegate.h"
11   -
12   -@implementation CNBainuoPayManagerDelegate
13   -+ (instancetype)shareInstance
14   -{
15   - static dispatch_once_t onceToken;
16   - static CNBainuoPayManagerDelegate *instance = nil;
17   - dispatch_once(&onceToken, ^{
18   - instance = [[self alloc] init];
19   - });
20   - return instance;
21   -}
22   -#pragma mark - BDNCashierSDKDelegate相关协议
23   -- (id<BDWalletSDKMainManagerDelegate>)bridgeBDWalletDelegateWithPayCallback:(BDNCashierSDKBaifubaoPaymentCallback)callback {
24   - // 宿主App实现的BDWalletSDKMainManagerDelegate代理类
25   - CNWalletPaymentDelegate *walletDelegate = [CNWalletPaymentDelegate shareInstance];
26   - walletDelegate.callback = callback;
27   - return walletDelegate;
28   -}
29   -@end
Example/CNLiveBBASMModule/CNLiveBBASMModule/CNLiveBainuoPay/CNWalletPaymentDelegate.h deleted 100644 → 0
1   -//
2   -// CNWalletPaymentDelegate.h
3   -// BBASMDemo_Example
4   -//
5   -// Created by CNLive on 2021/10/29.
6   -// Copyright © 2021 杨苓玉. All rights reserved.
7   -//
8   -
9   -#import <UIKit/UIKit.h>
10   -#import <BainuoCashierSDK/BDNCashierSDK.h>
11   -#import <BainuoCashierSDK/BDNCashierSDKBaifubaoService.h>
12   -NS_ASSUME_NONNULL_BEGIN
13   -
14   -@interface CNWalletPaymentDelegate : UIViewController<BDWalletSDKMainManagerDelegate>
15   -@property (nonatomic, copy) BDNCashierSDKBaifubaoPaymentCallback callback;
16   -
17   -+ (instancetype)shareInstance;
18   -@end
19   -
20   -NS_ASSUME_NONNULL_END
Example/CNLiveBBASMModule/CNLiveBBASMModule/CNLiveBainuoPay/CNWalletPaymentDelegate.m deleted 100644 → 0
1   -//
2   -// CNWalletPaymentDelegate.m
3   -// BBASMDemo_Example
4   -//
5   -// Created by CNLive on 2021/10/29.
6   -// Copyright © 2021 杨苓玉. All rights reserved.
7   -//
8   -
9   -#import "CNWalletPaymentDelegate.h"
10   -
11   -@interface CNWalletPaymentDelegate ()
12   -
13   -@end
14   -
15   -@implementation CNWalletPaymentDelegate
16   -
17   -+ (instancetype)shareInstance
18   -{
19   - static dispatch_once_t onceToken;
20   - static CNWalletPaymentDelegate *instance = nil;
21   - dispatch_once(&onceToken, ^{
22   - instance = [[self alloc] init];
23   - });
24   - return instance;
25   -}
26   -
27   -
28   -#pragma mark - BDNCashierSDKBaifubaoDelegate相关协议
29   -
30   -// 支付回调接口
31   -- (void)BDWalletPayResultWithCode:(int)statusCode payDesc:(NSString *)payDescs {
32   - if (self.callback) {
33   - self.callback(statusCode, payDescs);
34   - }
35   -}
36   -
37   -/*
38   -#pragma mark - Navigation
39   -
40   -// In a storyboard-based application, you will often want to do a little preparation before navigation
41   -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
42   - // Get the new view controller using [segue destinationViewController].
43   - // Pass the selected object to the new view controller.
44   -}
45   -*/
46   -
47   -@end
Example/Podfile.lock
... ... @@ -497,7 +497,7 @@ SPEC CHECKSUMS:
497 497 AlipaySDK-iOS: 8659cdb4403de7e5f26ad8b699864a9cbe53384c
498 498 BaiduBCE: ca933eadbccac8f8254976c9181ca5f45ded948b
499 499 BBAMNPLib: 070a935319cfd816f29d00c88012a496f7448229
500   - CNLiveBBASMModule: b9f55bded98f5ab01ab583c4ae5091fb07127238
  500 + CNLiveBBASMModule: 360d8b0be15993b8576c19f353e81ca5bc2b4845
501 501 CNLiveBeeHive: 1e105b15b6ccaad546258fcf91231563beb853d4
502 502 CNLiveCommonCategory: 11c736c733ab9c3ea27426d2fafff31a92f0286e
503 503 CNLiveEnvironment: 6af0a2f332b704ffdec67106b4ba044c7f8da371
... ...