## 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"
~~~

在主module中的build.gradle中對應位置添加(如下圖):
~~~
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
~~~
~~~
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
~~~

2、AndroidStudio集成

如上圖在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

4、 微信小程序支付成功回調添加注意事項
在你的包名相應目錄下新建一個wxapi目錄,并在該 wxapi 目錄下新增一個WXEntryActivity 類,該類繼承自 WxPayActivity(建議直接復制demo里的WXPayEntryActivity和manifest 文件該類對應的代碼)
(假設應用程序的包名為 cn.swiftpass.wxpay,則新添加的類 cn.swiftpass.wxpay.wxapi.WXEntryActivity) ,并在 manifest 文件里面加上 exported 屬性,設置為 true,launchMode屬性,設置為singleInstance,theme屬性,設置為@style/MyTranslucentTheme

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

## 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。
如圖標紅位置所示:

*微信支付在付款時需要啟動微信客戶端,SDK在構件內調用了 canOpne方法,請在plist文件中,增加微信相應app的白名單。
*支付寶支付在付款時需要啟動支付寶客戶端,SDK在構件內調用了 canOpne方法,請在plist文件中,增加微信相應app的白名單。
*銀聯支付在付款時需要啟動銀聯客戶端,SDK在構件內調用了 canOpne方法,請在plist文件中,增加銀聯相應app的白名單。
如圖所示:

## 3.1.1微信、支付寶、銀聯、微信小程序配置相關配置(該配置支持微信小程序支付)
*商戶在微信開發平臺申請開發APP應用后,微信開放平臺會生成APP的唯一標識APPID。在Xcode中打開項目,設置項目屬性重的URL Schemes 為子商戶的APPID。
*支付寶需要配置支付寶Url Schemes,使用Bundle Identifier。
*銀聯需要配置銀聯Url Schemes,使用Bundle Identifier。
*微信小程序配置 Url Schemes ,使用App應用在微信開放平臺下申請的AppId(該AppId必須已經關聯過小程序)。
如圖標紅位置所示:

## 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
截圖:

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通寶+消費
- 車位寶
- 車位寶交付