收银台
版本说明
版本号 | 更新时间 | 更新说明 |
---|---|---|
1.0版本 | 2020年11月27日 | 支付SDK |
1.1版本 | 2021年02月26日 | 新增交易记录查询SDK |
场景介绍
适用于在移动端APP中集成统一移动收银台功能。
APP调用SDK调用支付模块,APP会跳转到收银台中完成支付,支付完后跳回到商户APP内,最后展示支付结果。并可以查看支付记录列表及详情情况。
目前统一支付支持手机系统有:IOS(苹果)、Android(安卓)
用户进入商户APP,选择商品下单、确认购买,进入支付环节。商户服务后台生成支付订单,签名后将数据传输到APP端。以统一支付提供的DEMO为例,流程图如下 。
集成开发步骤要求
一、 集成开发步骤要求 (安卓)
1、将xftsdk.aar复制到libs目录(没有可以在对应项目目录创建)
2、修改build.gradle文件配置
defaultConfig {
applicationId "com.changsha.apps.xxx.xxx "
minSdkVersion 21 //sdk最小支持15
targetSdkVersion 29
versionCode 1
versionName "1.0"
multiDexEnabled true //此配置需要添加进来
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}
………
//将SDK依赖添加可以是高版本(暂未上传Maven,需手动添加SDK依赖)
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar","*.aar"])
api 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:5.5.3'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support:multidex:1.0.3'
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
implementation 'org.greenrobot:eventbus:3.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.3'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
implementation 'me.jessyan:autosize:1.1.2'
//新增
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-14'
implementation 'com.contrarywind:Android-PickerView:4.1.8'//新增
}
3、初始化sdk
创建自定义application继承application 并配置自定义application生效。 (1).application中初始化sdK
XftPay.initPaySDK(this,appID,https……);
(2).目录下创建 .wxapi包,包下创建WXPayEntryActivity类 (注:包名和类名必须与示列一致),应用包名+ .wxapi. WXPayEntryActivity
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
……
private IWXAPI api; //copy
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pay_result);//根据自己业务需求
api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);//copy
api.handleIntent(getIntent(), this); //copy
……
}
……
@Override
protected void onNewIntent(Intent intent) { super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
}
@Override
public void onReq(BaseReq req) {
}
//接收支付返回回调
@Override
public void onResp(BaseResp resp) {
Log.d("WXPayEntryActivity", "onPayFinish, errCode = " + resp.errCode);
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.app_tip);
builder.setMessage(getString(
R.string.pay_result_callback_msg, String.valueOf(resp.errCode)));
builder.show();
}
}
}
注:混淆时需在混淆文件中添加:
-keep class com.xft.android.pay.bean.** { *; }
4、使用注意
安装GenSignature.apk通过包名 获取应用签名并联系对接人员修改微信开发平台配置参数进行测试(根据微信规定非已配置的app包名和签名无法拉起微信app支付,如若支付功能已上线则只能通过正式包打包签名进行测试,否则会影响正式环境支付)
5、请求参数及示例
5.1 支付接口请求参数如下:
app_id | 是 | String | app_id, 由系统统一分配 |
---|---|---|---|
merchant_code | 是 | String | 商户号 |
user_id | 是 | String | 用户唯一标识(app登录时生成的用户id) |
store_code | 否 | String | 门店编号 |
operator_id | 否 | String | 操作员 id |
limit_pay | 否 | String | 00-全部 01-限定不能使 用信用卡支付 默认值 00 |
out_trade_no | 是 | String | 商户订单号 |
channel | 否 | String | 支付渠道,详细参考 支付渠道 channel 属性值 |
product | 是 | String | 支付产品,详细参考 支付产品 product 属性值,当支付类型为(微信,支付宝,银联)条码支付时非必传 |
client_ip | 是 | String | 客户端调用的 IP |
amount | 是 | String | 支付金额,单位分 |
subject | 是 | String | 订单标题,该参数最长 32 个 Unicode |
body | 是 | String | 商品描述信息,该参数最长为 255 个 Unicode 字符 |
description | 是 | String | 订单附加说明,最多 255 个 Unicode 字符 |
notify_url | 否 | String | 交易的通知地址 |
time_start | 否 | String | 订单生成时间,格式为 yyyyMMddHHmmss。 如 2009 年 12 月 25 日 9 点 10 分 10 秒表示为 20091225091010。 时区为 GMT+8 beijing。该时间取自商户服务器。 注:订单生成时间与超时时间需要同时传入才会生效 |
time_expire | 否 | String | 订单失效时间,格式为 yyyyMMddHHmmss。 如 2009 年 12 月 27 日 9 点 10 分 10 秒表示为 20091227091010。 时区为 GMT+8 beijing。该时间取自商户服务器。 注:订单生成时间与超时时间需要同时传入才会生效。 建议最短失效时间为 1 分钟 |
sign_type | 是 | String | 签名类型 |
Key | 是 | String | 签名密钥由系统分配 |
5.2 请求示例如下(新增UserId)
Rsp.Cashier cashier = new Rsp.Cashier();
cashier.setUser_id("55sjfrncjbe515415");//新增用户唯一标识(app自定义传入推荐用微信登录的用户标识/登录时生成的用户id)
cashier.setApp_id("1260026915276718080");
cashier.setAmount("500");
cashier.setMerchant_code("1120100066003");
cashier.setSubject("测试项目");
cashier.setClient_ip("13.2.1.5");
cashier.setOut_trade_no("5854ffffss");
cashier.setBody("宁乡支付");
cashier.setProduct("WECHAT_APP");
cashier.setDescription("宁乡app微信支付");
cashier.setSign_type("MD5");
cashier.setKey("616D1AA11CCEADE0427294DA5E81FCBA");
5.3订单流水查询列表请求参数如下:
app_id | 是 | String | app_id, 由系统统一分配 |
---|---|---|---|
agentId | 是 | String | 渠道商编号 |
userId | 是 | String | 用户唯一标识 |
titleStr | 否 | String | 支付流水标题文本 |
titleTextColor | 否 | String | 标题文本颜色(全局) |
titleBgColor | 否 | String | 标题背景颜色(全局) |
titleInfoStr | 否 | String | 详情页面标题文本 |
sign_type | 是 | String | 签名类型 |
key | 是 | String | 签名密钥由系统分配 |
5.4订单流水查询列表接口请求示例如下
Rsp.OrderSelect orderSelect = new Rsp.OrderSelect();
orderSelect.setApp_id("969037206616276993");
orderSelect.setAgentId("212010016732");
orderSelect.setUserId("55sjfrncjbe515415");//用户唯一标识(与下单userId一致)
orderSelect.setKey("6C7C97D68C7DB148DE678B4F5827D2F0");
orderSelect.setTitleBgColor("#2355df");
orderSelect.setTitleTextColor("#666666");//
orderSelect.setTitleStr("测试(蓝色)");
XftPay.Jump(orderSelect);
二、 集成开发步骤要求 (iOS)
1、支付SDK说明
示例代码(支付:user_id新增):
ZXMainController *vc = [[ZXMainController alloc] init];
vc.baseUrl = @"https://test-xlink.91xft.cn";
vc.md5Key = @"616D1AA11CCEADE0427294DA5E81FCBA";
vc.passDict = @{@"amount":self.field.text,@"description":@"测试商品",@"sub_app_id":@"wxd359xxxx7xxxa",@"app_id":@"12600269152exxx80",@"merchant_code":@"11201000xxxx",@"out_trade_no":randomNum,@"product":@"WECHAT_APP",@"client_ip":@"218.76.8.29",@"subject":@"测试商品",@"body":@"测试商品" ,@"sign_type":@"MD5",@"user_id":@"vdjfnsdjhuhhdh55456e245"};
[self.navigationController pushViewController:vc animated:YES];
app_id | 是 | String | app_id, 由系统统一分配 |
---|---|---|---|
Agent_code | 是 | String | 渠道商编号 |
User_id | 是 | String | 用户唯一标识 |
passColor | 否 | String | 标题文本颜色(全局) |
key | 是 | String | 签名密钥由系统分配 |
ZXOrderController *vc = [[ZXOrderController alloc] init];
vc.passColor = [UIColor redColor];
vc.baseUrl = @"https://test-xlink.91xft.cn";
vc.passDict = @{@"app_id":@"1260021591438262272",
@"agent_code":@"211010011071",@"user_id":@"vdjfnsdjhuhhdh55456e245"}; //对应
vc.key = @"6D2A95DCE2D1BB70554DA20A2E9876A8";
[self.navigationController pushViewController:vc animated:YES];
一.支付SDK说明
1、 使用CocoaPods 安装第三方的依赖库pod 'AFNetworking' pod 'WechatOpenSDK' pod 'MJRefresh'
2、在Appdelegate中初始化微信支付以及配置回调
3、在plist中加LSApplicationQueriesSchemes 字段
4、调用SDK时只需将frameWork文件夹拖入项目中,用自带的modal 到ZXMainController 详情见Demo
二.订单流水查询SDK说明
1.原支付sdk的基础上,在other linker flags 中加上
-ObjC 使用详情见demo