## 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、代码初始化
- 文档说明
- 项目说明
- 修改记录
- 场景介绍
- 业务流程
- 开发步骤
- 注意事项
- 可配置密钥签名
- 2.0版本变更说明
- 接口规则
- 协议规则
- 安全规范
- 测试账户
- 测试信息
- API文档
- 收银台
- Android
- IOS
- H5支付
- 扫码付
- 体系外付款码
- 浏览器H5收银台
- 交易查询
- 交易通知
- 申请退款
- 退款查询
- 退款通知
- 批量退款
- 对账单下载
- prepareUrl
- 关闭订单
- 查询订单版本
- 商户
- 商户费率信息编辑
- 商户录入
- 商户编辑
- 查询平台店铺id
- 获取商户可结算信息
- 获取登录名是否存在
- 查询卡系统商户ID
- 大食堂商户进件
- 大食堂商户编辑
- 大食堂商户费率信息编辑
- 大食堂平台服务费信息编辑
- 结算相关
- 触发结算补单
- 接收结算订单
- 团购业务拆单(多次子订单退款)
- 优惠券下单消费
- 优惠券退款
- 优惠券接收接收订单
- 查询拆单结算数据
- 分期结算入账
- 建业+线下订单拆单
- 扫码支付
- 扫码预下单
- 扫码退款
- 支付订单查询
- 退款订单查询
- 扫码交易通知
- 扫码退款通知
- 文档描述
- 客户端
- 扫码支付获取支付列表
- 刷新支付二维码
- 扫码支付设置支付顺序
- 设置是否免密支付
- 获取设置支付列表
- 发起支付
- 长连接通知app
- app扫码预下单测试
- 小额免密协议
- 使用说明
- 设置免密支付详情
- 获取app支付页支付类型与支付订单详情
- 我的优惠券列表
- 可用优惠券
- 获取优惠券单个
- PC端二维码生成规则
- 共享财务
- 删除接口
- 服务商日账单查询
- 服务商商户日账单对账
- H5/小程序-支付方式列表
- H5/小程序-扫码支付接口
- H5/小程序扫码新支付接口
- H5/小程序扫码新支付方式列表
- H5/小程序扫码查询通宝+折扣
- 支付sdk
- 获取支付列表
- 支付下单
- 查询是否实名
- APP微信小程序下单(APP端)
- 订单状态查询
- 微信小程序预下单拉起支付(小程序端)
- 应答码说明
- 联系我们
- 大额汇款
- 大额预下单
- 大额订单查询
- 大额汇款下单
- 业务方校验加密-prepareUrl
- 大额通道通知汇款成功
- 大额通知
- 大额汇款单查询
- 大额订单列表查询
- 大额订单详情查询
- 组件跳转路径
- 大额订单取消
- 对接注意事项
- pos大额
- 下单
- pos支付成功
- pos每笔支付
- pos每笔撤销
- pos支付记录查询
- pos大额每笔异步通知
- 协作
- 统一传递变量
- 应答码
- 应用日志目录规范
- 公众号/服务窗H5
- 传入参数
- 支付列表
- 支付下单
- 抖音支付
- 抖音支付下单
- 代付
- 代付发起
- 代付查询
- 异步通知
- 易生账户余额
- 其他业务
- 极速退款-商家补贴
- 超时赔付
- 通知业务完成
- 大食堂商户附加费入账
- 业务方自动对账
- 查询业务方账单总计
- 获取建业+对应账单详情
- 通知建业+需要补推送拆单
- 补单推送结算
- 商户统一进件业务
- 获取token
- 商户进件
- 商户进件预加载数据获取
- 上传图片
- 获取商户查看编辑数据
- 商户修改
- 获取门店预加载数据
- 门店进件
- 获取门店查看编辑数据
- 门店修改
- 凯强需要的获取门店信息接口
- Mq队列数据格式
- 获取分支银行信息
- 营销补贴
- 营销补贴拆单
- 新营销补贴拆单-支持多笔
- 业务成功通知
- 查询代理及所属服务商
- 查询门店、商户、代理、服务商
- 根据类型和id查询数据
- 中房
- 中房-获取支付列表
- 业务方统一对账
- 业务方上传账单
- 获取平台方日账单详情
- 异常订单处理
- 回调通知账单对比结果
- 获取业务方账单
- 获取商户账单
- 大额支付查询
- 银基商城
- 实体卡消费拆单
- 异步通知拆单结果
- E卡结算单首页
- 去结算的账户信息
- 结算记录
- 确认结算
- 驳回结算
- 修改同步状态
- 结算记录的账户信息
- 支付H5(手机浏览器)
- 传入H5参数
- H5支付列表
- 支付下单接口
- 实体卡消费
- 实体卡消费接口
- H5商户统一进件
- 发验证码
- 录件员登录
- 进行中的录单列表/数量
- 录单详情
- 获取二维码
- 商户登录
- 商铺列表
- 门店详情
- 新建门店
- 录单员新建商户
- 代商户入件
- 商户自助入件
- 上传文件
- 商户获取个人档案信息
- 录单员获取商户档案信息
- 查询商户信息
- 创建商户结果
- tp-商户获取token
- tp-获取商户进件状态
- tp-根据token获取初始化权限信息
- 共享家园
- 对接说明
- 接收结算数据
- 至尊通道对账
- 接收通道通知
- 社区商业
- 现金入账
- 代理账户
- 分账明细
- 请求现金收账单
- 确认收账单状态
- 更新账单状态
- pos支付
- pos扫码支付
- 查询商户信息
- 获取订单列表
- pos退款
- pos实体卡消费
- pos通宝+消费
- 车位宝
- 车位宝交付