💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## APP端开发步骤 > **Android开发要点说明** 1、AndroidStudio集成之前准备工作 (1).建业支付收银台包括了支付宝支付,银联云闪付和微信支付集成,如果项目已有微信支付宝银联云闪付,请先删除微信支付宝银联云闪付集成 (2)建业支付收银台部分代码所用koltin,所以项目需要支持kotlin,从Android Studio 3.0开始,将直接集成Kotlin而无需安装任何的插件。只需要在整个项目的build.gradle中对应位置添加(如下图): ~~~ ext.kotlin_version = '1.3.21' ~~~ ~~~ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" ~~~ ![](https://box.kancloud.cn/2ebf9f162e3df76f59a238548d19ecee_820x553.png) 在主module中的build.gradle中对应位置添加(如下图): ~~~ apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' ~~~ ~~~ implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" ~~~ ![](https://box.kancloud.cn/897270b0e9c959dd2a3052e4e336328d_940x844.png) 2、AndroidStudio集成 ![](https://img.kancloud.cn/b8/5b/b85bbff1413d65e585f819d8fc78b2ae_283x196.jpg) 如上图在app下的libs文件夹下添加libammsdk.jar,UPPayAssistEx.jar,UPPayPluginExPro.jar,wftsdk5.0.jar 和创建一个文件夹soon并把alipaySdk.aar和 pay-zhizun.aar放入其中 在build.gradle中添加引用 : ~~~ implementation fileTree(include: ['*.aar'], dir: 'libs/soon') implementation files('libs/wftsdk5.0.jar') implementation files('libs/UPPayAssistEx.jar') implementation files('libs/UPPayPluginExPro.jar') implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+' ~~~ 2、代码初始化 在Application 类OnCreate()中调用 PayCashier.builder() .setAgainOrderClassPath("收银台SDK自带的支付失败界面显示订单已经支付完成,点击重新下单按钮跳转界面路径-------选填") .setAppPackageName("App包名 ------必填") .setFailureClassPath("收银台SDK自带的支付失败界面点击放弃支付按钮跳转界面路径-------选填") .setForgetPwdClassPath("收银台SDK选择建业体系内支付方式(通宝,通宝+,余额)点击忘记密码按钮跳转界面路径 -----必填") .setSuccessClassPath("收银台SDK自带的支付成功界面点击完成按钮跳转界面路径-------选填") .setCustomFailureClassPath("自定义支付失败界面路径------选填") .setCustomSuccessClassPath("自定义支付成功界面路径------选填") .setNoRealNameAuthClassPath(“实名认证界面路径”") .setNoSetPwdClassPath(“设置建业体系内支付密码界面路径”") .initPay(this) 并在AndroidManifest.xml中添加 3、 微信支付成功回调添加注意事项 在你的包名相应目录下新建一个wxapi目录,并在该 wxapi 目录下新增一个WXPayEntryActivity 类,该类继承自 WxPayActivity(建议直接复制demo里的WXPayEntryActivity和manifest 文件该类对应的代码) (假设应用程序的包名为 cn.swiftpass.wxpay,则新添加的类 cn.swiftpass.wxpay.wxapi.WXPayEntryActivity) ,并在 manifest 文件里面加上 exported 属性,设置为 true,launchMode属性,设置为singleInstance,theme属性,设置为@style/MyTranslucentTheme ![](https://box.kancloud.cn/f8338fd4b600aa38d19f41ded78b648e_641x467.png) 4、 微信小程序支付成功回调添加注意事项 在你的包名相应目录下新建一个wxapi目录,并在该 wxapi 目录下新增一个WXEntryActivity 类,该类继承自 WxPayActivity(建议直接复制demo里的WXPayEntryActivity和manifest 文件该类对应的代码) (假设应用程序的包名为 cn.swiftpass.wxpay,则新添加的类 cn.swiftpass.wxpay.wxapi.WXEntryActivity) ,并在 manifest 文件里面加上 exported 属性,设置为 true,launchMode属性,设置为singleInstance,theme属性,设置为@style/MyTranslucentTheme ![](https://img.kancloud.cn/bd/55/bd55fb87634d8563677a6e25bf88394c_891x414.jpg) 5、添加用到的一些功能的集成: ~~~ implementation 'com.android.support:recyclerview-v7:28.0.0' implementation 'com.google.code.gson:gson:2.2.4' def work_version = "1.0.1" implementation "android.arch.work:work-runtime:$work_version" implementation 'com.android.support:animated-vector-drawable:28.0.0' ~~~ 6、混淆配置 -dontwarn com.unionpay.** -keep class com.unionpay.** {*;} -keep class org.simalliance.openmobileapi.** {*;} -dontwarn com.switfpass.pay.** -keep class com.switfpass.pay.** { *;} -dontwarn com.tencent.** -keep class com.tencent.** { *;} ## **一、iOS 支付SDK集成流程** ## 1. 导入支付构件情况说明 ## 1.1导入微信、支付宝、银联SDK 微信 按照微信支付文档导入 添加各种依赖库文件 支付宝 按照支付宝文档导入 添加各种依赖库文件 银联 按照银联文档导入 添加各种依赖库文件 ## 1.2导入收银台SDK和bundle文件 把CasierSDK.framework和CasierSDK.bundle拖入工程 并选择 PROJECR/TARGET -> Build Settings -> Allow non-modular includes in Framework Modules -> YES ![](https://img.kancloud.cn/35/b3/35b3c4a84a4c0e31784175d3ac4cb67b_1240x219.png) ## 1.3需要的第三方 ## 1.3.1 去官网下载微信、支付宝、银联的SDK,并添加进工程 ## 1.3.2 pod文件中添加如下文件 执行pod install ``` pod 'AFNetworking' pod 'MJExtension' pod 'SDWebImage' pod 'MBProgressHUD' pod 'IQKeyboardManager' pod 'FDFullscreenPopGesture' pod 'YYText' pod 'Masonry' pod 'SocketRocket' **注意:码付SDK需要使用到的长连接库** ``` ## 2.具体使用情况 ## 2.1导入头文件 ``` #import <CashierSDK/CashierSDK.h> ``` ## 2.2AppDelgate设置 ``` - (BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { NSLog(@"%@", url.host); if ([url.host isEqualToString:@"pay"]) { //微信支付 [WXApi handleOpenURL:url delegate:[CashierManager shareManager]]; }else if ([url.host isEqualToString:@"platformId=wechat"]){ //微信小程序支付回调 [WXApi handleOpenURL:url delegate:[CashierManager shareManager]]; }else if ([url.host isEqualToString:@"safepay"]) { //支付宝支付 [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) { [[CashierManager shareManager] aliPayCompleteWithResultDic:resultDic]; }]; }else if ([url.host isEqualToString:@"uppayresult"] || [url.host isEqualToString:@"paydemo"]) { //银联支付 [[UPPaymentControl defaultControl] handlePaymentResult:url completeBlock:^(NSString *code, NSDictionary *data) { [[CashierManager shareManager] unionPayCompleteWithCode:code data:data]; }]; } return YES; } // NOTE: 9.0以后使用新API接口 - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options { NSLog(@"%@", url.host); if ([url.host isEqualToString:@"pay"]) { //微信支付 [WXApi handleOpenURL:url delegate:[CashierManager shareManager]]; }else if ([url.host isEqualToString:@"platformId=wechat"]){ //微信小程序支付回调 [WXApi handleOpenURL:url delegate:[CashierManager shareManager]]; }else if ([url.host isEqualToString:@"safepay"]) { //支付宝支付 [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) { [[CashierManager shareManager] aliPayCompleteWithResultDic:resultDic]; }]; }else if ([url.host isEqualToString:@"uppayresult"] || [url.host isEqualToString:@"paydemo"]) { //银联支付 [[UPPaymentControl defaultControl] handlePaymentResult:url completeBlock:^(NSString *code, NSDictionary *data) { [[CashierManager shareManager] unionPayCompleteWithCode:code data:data]; }]; } return YES; } #pragma mark 处理App从微信、支付宝、云闪付App 通过双击Home键直接返回到收银台时或者通过点击微信、支付宝、云闪付App页面顶部左上角的系统按钮返回App时,有可能会引起订单支付异常的情况处理。 - (void)applicationDidBecomeActive:(UIApplication *)application { //当App由running状态切换到inactive状态时,判断backNumber的值, if([CashierManager shareManager].backNumber==3){ //直接从微信支付宝银联点左上角返回 [[NSNotificationCenter defaultCenter] postNotificationName:kCashier_BackFromWXPay_Alipay_UnionPayObject object:nil]; } } ``` ## 2.3初始化收银台时的相关配置(跳转的界面、是否打开日志上传) ``` /** 配置收银台(相关跳转界面,日志上传) @param customSuccessVCState 是否自定义支付成功控制器,当customSuccessVCState=NO,默认跳转SDK自带的支付成功页面, customSuccessVCState=YES时,必须实现(CashierManagerDelegate)代理方法 -(void)cashierManageCustomPaySuccessVCWithOrderInfo:(NSDictionary *)orderInfo result:(NSDictionary *)result payType:(NSString *)payType; @param customFailVCState 是否自定义支付失败控制器, 当customFailVCState=NO,支付失败时默认跳转SDK自带的支付失败页面 当customFailVCState=YES,必须实现(CashierManagerDelegate)代理方法 -(void)cashierManageCustomPayFailureVCWithOrderInfo:(NSDictionary *)orderInfo failureReason:(NSDictionary *)failureReason payType:(NSString *)payType; @param fixPayPswClass 收银台点击“忘记密码”跳转到的控制器 不可为空 类型为Class @param authenticationClass 收银台实名认证控制器类对象 类型为Class @param payPwdClass 收银台初始话设置密码控制器类对象 类型为Class @param uploadLog 是否上传日志 @param storeId 商户id @param orderInfo:商品订单信息 */ -(void)setIsCustomSuccessVCState:(BOOL)customSuccessVCState setCustomFailVCState:(BOOL)customFailVCState fixPayPswVCClass:(Class)fixPayPswClass realNameAuthenticationVCClass:(nonnull Class)authenticationClass setPayPwdVCClass:(nonnull Class)payPwdClass uploadLog:(BOOL)uploadLog storeId:(nonnull NSString *)storeId; 示例: //第一步:收银台相关配置(跳转的界面、是否打开日志上传) [[CashierManager shareManager] setIsCustomSuccessVCState:YES setCustomFailVCState:YES fixPayPswVCClass:[FixPswViewController class] realNameAuthenticationVCClass:[AuthenticationViewController class] setPayPwdVCClass:[FirstSetPayPwdController class] uploadLog:YES storeId:storeId]; /*第二步:配置收银台SDK 实名认证,设置支付密码,修改支付密码按钮跳转方式。 目前支持push跳转和Present跳转: @param kPresentMode 是present跳转模式 @param kPushMode 是push跳转模式 ********************************************* 这一步是可选的(SDK内部配置配置了跳转方式 修改支付密码和设置支付密码默认是push跳转, 实名认证默认是present跳转) */ [[CashierManager shareManager] configCashierVCJumpModeWithfixPayPwd:kPresentMode withAuthentication:kPresentMode withSetPayPwd:kPushMode]; //第三步:收银台订单信息初始化及代理的设置 [[CashierManager shareManager] initCashierVCWithOrderInfo:orderInfo delegate:self]; 注意:如果要想自己配置跳转方式生效,配置方式必须在初始化收银台订单信息函数之前调用,否则你配置的跳转方式不会生效。 ``` ## 2.4在初始化收银台之后,如果使用微信支付开发者必须向微信终端注册第三方应用 ``` 目前SDK 支持三种微信AppId配置方法如下: @param /* 枚举类型参数含义 typedef enum{ //使用SDK内部默认的微信AppId kCashier_DefaultWXAppId=0, //使用传入微信AppId kCashier_ConfigureWXAppId, //使用从接口获取的微信 AppId kCashier_APiObtainWXAppId }kCashier_WXAppId_Source; */ // 1.第一种使用SDK默认配置微信AppId [CashierManager shareManager].wxAppId_Source=kCashier_DefaultWXAppId; // 2.第二种使用用户传入的微信AppId [CashierManager shareManager].wxAppId_Source=kCashier_ConfigureWXAppId; [CashierManager shareManager].cashier_configure_wxAppId=@"wx661b798d47413d09"; // 3.第三种从接口获取微信AppId [CashierManager shareManager].wxAppId_Source=kCashier_APiObtainWXAppId; 上面三种方法选用一种方法即可。 **注意:不管上面的那种配置方法用户必须在 URL Schemes 中进行配置。 ** ``` ## 2.5 初始化码付款时相关的配置 (跳转的界面、是否打开日志上传) 第一步:初始化码付信息 ``` 设置码付配置数据 @param fixPayPwdClass 收银台点击“忘记密码”跳转到的控制器 不可为空 类型为Class @param authenticationClass 收银台跳转到实名认证控制器 不可为空 类型为Class @param payPwdClass 收银台跳转到设置支付密码控制器 不可为空 类型为Class ``` -(void)setCashierCodePaymentWithfixPayPwdVCClass:(Class)fixPayPwdClass realNameAuthenticationVCClass:(Class)authenticationClass setPayPwdVCClass:(Class)payPwdClass uploadLog:(BOOL)uploadLog storeId:(nonnull NSString *)storeId; 第二步 配置码付SDK中设置支付密码,实名认证,修改支付密码视图的跳转方式(可选) ```目前支持push跳转和Present跳转: @param kPresentMode 是present跳转模式 @param kPushMode 是push跳转模式 这一步是可选的(SDK内部配置配置了跳转方式 修改支付密码和设置支付密码默认是push跳转, 实名认证默认是present跳转) ``` [[CashierManager shareManager] configCodePaymentJumpModeWithfixPayPwd:kPushMode withAuthentication:kPresentMode withSetPayPwd:kPushMode]; 第三步:初始化码付订单信息 ``` @param orderInfo 订单信息字典 字典里的字段 | field name | data type | most | description | customid string yes 会员编号 mainIp string yes 收银台服务器域名 key string yes 加密密钥 ``` -(void)initCashierCodePaymentInfo:(NSDictionary *)orderInfo delegate:(id)delegate; 注意:如果要想自己配置跳转方式生效,配置方式必须在初始化码付订单信息函数之前调用,否则你配置的跳转方式不会生效。 ## 3.注意事项 ## 3.1.1微信、支付宝、银联相关配置(该配置不支持小程序支付) *商户在微信开发平台申请开发APP应用后,微信开放平台会生成APP的唯一标识APPID。在Xcode中打开项目,设置项目属性重的URL Schemes 为子商户的APPID。 *支付宝需要配置支付宝Url Schemes,使用Bundle Identifier。 *银联需要配置银联Url Schemes,使用Bundle Identifier。 如图标红位置所示: ![](https://img.kancloud.cn/03/6a/036a17a555d27c0ae60fd01718abd55a_1240x859.png) *微信支付在付款时需要启动微信客户端,SDK在构件内调用了 canOpne方法,请在plist文件中,增加微信相应app的白名单。 *支付宝支付在付款时需要启动支付宝客户端,SDK在构件内调用了 canOpne方法,请在plist文件中,增加微信相应app的白名单。 *银联支付在付款时需要启动银联客户端,SDK在构件内调用了 canOpne方法,请在plist文件中,增加银联相应app的白名单。 如图所示: ![](https://img.kancloud.cn/a8/95/a895fedbd478ba9df2560272017c6c48_1240x862.png) ## 3.1.1微信、支付宝、银联、微信小程序配置相关配置(该配置支持微信小程序支付) *商户在微信开发平台申请开发APP应用后,微信开放平台会生成APP的唯一标识APPID。在Xcode中打开项目,设置项目属性重的URL Schemes 为子商户的APPID。 *支付宝需要配置支付宝Url Schemes,使用Bundle Identifier。 *银联需要配置银联Url Schemes,使用Bundle Identifier。 *微信小程序配置 Url Schemes ,使用App应用在微信开放平台下申请的AppId(该AppId必须已经关联过小程序)。 如图标红位置所示: ![](https://img.kancloud.cn/4f/14/4f1482a534ade400694b00cc584cef85_2684x2204.png) ## 3.2其它 ## 3.2.1 向微信终端程序注册第三方应用: ``` - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [WXApi registerApp:@"wx2a5538052969956e"]; } ``` ## 3.2.2 使用银联SDK需将Appdelegate.m改为Appdelegate.mm (由于支付控件使用到了C、C++和OC混编的情况,所以项目工程引入UPPaymentControl.h头文件以后可能会出现链接错误) ## 3.2.3 打包上传AppStore时 将支付SDK导入项目后,务必将Enable Bitcode设置为NO,否则上传会失败。 设置步骤:选择工程targets——>build settings ->搜索bitcode->设置Enable Bitcode为NO 截图: ![](https://img.kancloud.cn/85/36/853637a2f31673cf57551ea484a997cf_2234x442.png) demo下载地址:[https://github.com/jingdongli/zzpaysdk](https://github.com/jingdongli/zzpaysdk) ## WEB端开发步骤 1、参数配置 2、代码初始化