先绑卡,再交易. 绑卡需要使用短验接口.对于开通快捷短信二次验证功能的商户,发起快捷后需要调用"快捷交易短信确认"接口进行二次确认
测试请求地址 | https://cbtrxtest.helipay.com/cbtrx/rest/member/toCreateBindCord |
请求地址 | https://cbptrx.helipay.com/cbtrx/rest/member/toCreateBindCord |
提交方式 | 采用POST方法提交,requestbody传值 Content-Type=[application/json;charset=UTF-8] |
签名算法 | UTF-8字符编码 SHA256签名 AES加密 |
名称 | 参数 | 类型 | 必填 | 示例值 | 说明 |
---|---|---|---|---|---|
产品类型 | productCode | String(20) | 是 | QUICKPAY | 固定值 |
绑卡订单号 | orderNo | String(64) | 是 | p_20170302185347 | |
商户编号 | merchantNo | String(10) | 是 | Me10000002 | 合利宝-跨境系统分配的商户编号 |
用户姓名 | memberName | String(10) | 是 | 张三 | |
用户身份证号 | memberID | String(18) | 是 | 110101200001012999 | |
用户手机号 | memberMobile | String(20) | 是 | 13701234567 | |
卡号 | memberCardNo | String(19) | 是 | 1234567890 | |
用户编号 | memberNo | String | 是 | ID9527 | |
银行代码 | bankCode | String(20) | 是 | ICBC/CCB | 银行编码,详细信息参见附录 |
签约类型 | protocolType | String(10) | 是 | protocol | 上送protocol走新通道 且必须填写短验 |
是否同步下发短信 | sendValidateCode | String(10) | TRUE | TRUE:同步下发,其他不同步下发 | |
信用卡有效期年份 | expireYear | String(10) | 否 | 17 | 信用卡有效期年 |
信用卡有效期月份 | expireMonth | String(10) | 否 | 04 | 信用卡有效期月 |
信用卡安全码 | cvv2 | String(10) | 否 | 000 | 信用卡安全码 |
分账请求参数明细 | shareList | List(100) | 否 | 如下说明 | 若商户开通分账产品,且本次交易需要分账,则此参数必填 |
名称 | 参数 | 类型 | 必填 | 示例值 | 说明 |
---|---|---|---|---|---|
排序参数 | index | Integer | 是 | 1 | 用于交易加密参数排序,不能重复 |
分账账户编号 | shareMerchantNo | String(10) | 是 | Me10000002 | |
分账金额 | shareAmount | Number(10.2) | 是 | 0.01 | 单位:元 所有明细分账金额相加必须等于交易金额 主账户分账金额必须大于交易手续费 |
名称 | 参数 | 类型 | 必填 | 示例值 | 说明 |
---|---|---|---|---|---|
产品编码 | productCode | String(20) | 是 | QUICKPAY | |
绑卡订单号 | orderNo | String(64) | 是 | p_20170302185347 | |
商户编号 | merchantNo | String(10) | 是 | Me10000002 | 合利宝-跨境系统分配的商户编号 |
响应码 | errorCode | String(10) | 是 | 0000 | 0000 代表请求成功 |
响应信息 | errorMessage | String(200) | 否 | 成功 | 响应信息 错误信息 |
//绑卡预下单 @RequestMapping(value = "/newBindMemberCard") public ModelAndView bindMemberCard(@ModelAttribute @Valid NewMemberCardBindRequestForm memberCardBindRequestForm, BindingResult result) { ModelAndView mav = new ModelAndView(); if (result.hasErrors()) { throw new CommonSystemException(CommonSystemException.ILLEGAL_DATA_REQUEST[0], result.getFieldError().getDefaultMessage()); } HeliRequest heliRequest = remoteService.postRemoteInvoke(LoadPropertiesUtils.getProperty("createQuickOreder"), JSONObject.toJSONString(encodeAndSign(memberCardBindRequestForm, memberCardBindRequestForm.getProductCode(), memberCardBindRequestForm.getMerchantNo())), HeliRequest.class); NewMemberCardDoBindResponseForm memberCardBindResponseForm = decode(heliRequest, NewMemberCardDoBindResponseForm.class, memberCardBindRequestForm.getProductCode(), memberCardBindRequestForm.getMerchantNo()); if (!CbDemoConstants.SUCCESS_CODE.equals(memberCardBindResponseForm.getErrorCode())) { throw new CommonSystemException(memberCardBindResponseForm.getErrorCode(), memberCardBindResponseForm.getErrorMessage()); } if (memberCardBindRequestForm.getSendValidateCode().equals("FALSE")){ mav.setViewName("bind/newBindMemberCardSendMsg"); mav.addObject("responseForm", memberCardBindResponseForm); return mav; } mav.setViewName("bind/todoNewBindMemberCard"); mav.addObject("responseForm", memberCardBindResponseForm); return mav; }
测试请求地址 | https://cbtrxtest.helipay.com/cbtrx/rest/member/toConfrimBindCard |
请求地址 | https://cbptrx.helipay.com/cbtrx/rest/member/toConfrimBindCard |
提交方式 | 采用POST方法提交,requestbody传值 Content-Type=[application/json;charset=UTF-8] |
签名算法 | UTF-8字符编码 SHA256签名 AES加密 |
名称 | 参数 | 类型 | 必填 | 示例值 | 说明 |
---|---|---|---|---|---|
产品编码 | productCode | String(20) | 是 | QUICKPAY | |
原绑卡申请订单号 | orderNo | String(64) | 是 | p_20170302185347 | 原绑卡申请订单号 |
商户编号 | merchantNo | String(10) | 是 | Me10000002 | 合利宝-跨境系统分配的商户编号 |
短信验证码 | smsCode | String(20) | 是 | 952700 | 绑卡申请接口调用成功后用户手机收到的短信验证码 |
名称 | 参数 | 类型 | 必填 | 示例值 | 说明 |
---|---|---|---|---|---|
响应码 | errorCode | String(10) | 是 | 0000 | 0000 代表请求成功 |
响应信息 | errorMessage | String(200) | 否 | 成功 | 响应信息 错误信息 |
响应时间 | current | String(20) | 是 | 2018-04-01 12:00:00 | 格式yyyy-MM-dd HH:mm:ss |
绑卡ID | bindId | String | 是 | id_9527_bindId | 绑卡成功跨境系统生成的用户绑卡ID |
//短验后进行绑卡 @RequestMapping(value = "/doConfirmBindMemberCard") public ModelAndView doBindMemberCard(@ModelAttribute @Valid NewMemberCardDoBindRequestForm memberCardDoBindRequestForm, BindingResult result) { ModelAndView mav = new ModelAndView(); if (result.hasErrors()) { throw new CommonSystemException(CommonSystemException.ILLEGAL_DATA_REQUEST[0], result.getFieldError().getDefaultMessage()); } HeliRequest heliRequest = remoteService.postRemoteInvoke(LoadPropertiesUtils.getProperty("newConfrimBindCard"), JSONObject.toJSONString(encodeAndSign(memberCardDoBindRequestForm, memberCardDoBindRequestForm.getProductCode(), memberCardDoBindRequestForm.getMerchantNo())), HeliRequest.class); NewMemberCardDoBindResponseForm memberCardDoBindResponseForm = decode(heliRequest, NewMemberCardDoBindResponseForm.class, memberCardDoBindRequestForm.getProductCode(), memberCardDoBindRequestForm.getMerchantNo()); if (!CbDemoConstants.SUCCESS_CODE.equals(memberCardDoBindResponseForm.getErrorCode())) { throw new CommonSystemException(memberCardDoBindResponseForm.getErrorCode(), memberCardDoBindResponseForm.getErrorMessage()); } mav.setViewName("/bind/doNewBindMemberCardResult"); mav.addObject("responseForm", memberCardDoBindResponseForm); return mav; }
测试请求地址 | https://cbtrxtest.helipay.com/cbtrx/rest/domestic/pay/newApply |
请求地址 | https://cbptrx.helipay.com/cbtrx/rest/domestic/pay/newApply |
提交方式 | 采用POST方法提交,requestbody传值 Content-Type=[application/json;charset=UTF-8] |
签名算法 | UTF-8字符编码 SHA256签名 AES加密 |
名称 | 参数 | 类型 | 必填 | 示例值 | 说明 |
---|---|---|---|---|---|
产品编码 | productCode | String(20) | 是 | QUICKPAY | |
商户订单号 | orderNo | String(64) | 是 | p_20170302185347 | |
商户编号 | merchantNo | String(10) | 是 | Me10000002 | 合利宝-跨境系统分配的商户编号 |
付款人姓名 | memberName | String(10) | 是 | 小明 | |
身份证 | memberID | String(30) | 是 | 个人身份证号 | |
手机号 | memberMobile | String(20) | 是 | 13601234567 | |
交易额 | orderAmount | BigDecimal | 是 | 0.01 | |
绑卡ID | bindId | String | 是 | id_9527_bindId | 绑卡成功跨境系统生成的用户绑卡ID |
商品名称 | goodsName | String(400) | 是 | 玫瑰花 | |
商品数量 | goodsQuantity | Integer | 是 | 1 | |
用户注册账号 | userAccount | String | 是 | 18900000001 | 用户注册账号:手机或邮箱 |
应用类型 | appType | String | 是 | IOS | IOS、AND(安卓客户端)、H5、WX、OTHER |
应用名 | appName | String | 是 | 某宝 | 应用市场名称、网站名称、微信公众号或小程序或网站名 |
业务场景 | dealSceneType | String | 是 | QUICKPAY | 场景类别枚举值详见附录:行业及其场景类型列表 |
终端类型 | terminalType | String | 是 | IMEI | IMEI、MAC、UUID(针对 IOS 系统)、OTHER |
终端标识 | terminalId | String | 是 | 122121212121 | 终端唯一标识,如手机序列号 |
是否同步下发短信 | sendValidateCode | String | 否 | TRUE | TRUE:同步下发 |
交易定位地址 | lbs | String | 否 | {"lat":"23.1290765766","log":"113.2643446427"} | lat:经度 log:纬度 |
场景参数 | dealSceneParams | String | 否 | 商品详情(list) | 采用json串的模式传入,字段名和字段内容需彼此对应,相关字段详见附件“场景及对应参数列表 |
有效期单位 | periodUnit | String(6) | 否 | hour | Day:天 Hour:时 Minute:分 |
有效期 | period | String | 否 | 1 | 过了订单有效时间的订单会被设置为取消状态不能再重新进行支付 |
服务器回调地址 | serverCallbackUrl | String(300) | 是 | ||
下单IP | orderIp | String(40) | 是 | ||
平台商户编号 | platMerchantNo | String(10) | 否 | 如下说明 | 电商平台商户所属的平台商编号 |
名称 | 参数 | 类型 | 必填 | 示例值 | 说明 |
---|---|---|---|---|---|
产品编码 | productCode | String(20) | 是 | QUICKPAY | |
商户订单号 | orderNo | String(64) | 是 | p_20170302185347 | |
商户编号 | merchantNo | String(10) | 是 | Me10000002 | 合利宝-跨境系统分配的商户编号 |
响应码 | errorCode | String(10) | 是 | 0000 | 0000 代表请求成功 |
响应信息 | errorMessage | String(200) | 否 | 成功 | 响应信息 错误信息 |
响应时间 | current | String(20) | 是 | 2018-04-01 12:00:00 | 格式yyyy-MM-dd HH:mm:ss |
订单状态 | orderStatus | String(20) | 否 | SUCCESS/INIT | 支付成功:SUCCESS,未支付:INIT,待验证:NEED_CONFIRM |
订单金额 | orderAmount | Number(10.2) | 否 | 0.01 | 单位:元 |
@RequestMapping(value = "/newQuickPay", method = RequestMethod.POST) public ModelAndView quickPay(@ModelAttribute @Valid NewQuickPayRequestForm quickPayRequestForm, BindingResult bindingResult) throws UnsupportedEncodingException { ModelAndView modelAndView = new ModelAndView(); if (bindingResult.hasErrors()) { throw new CommonSystemException(CommonSystemException.ILLEGAL_DATA_REQUEST[0], bindingResult.getFieldError().getDefaultMessage()); } HeliRequest result = HandleDataUtils.encodeAndSign(quickPayRequestForm,quickPayRequestForm.getProductCode(),quickPayRequestForm.getMerchantNo()); HeliRequest heliRequest = remoteService.postRemoteInvoke(LoadPropertiesUtils.getProperty("newQuickURL"), JSONObject.toJSONString(result), HeliRequest.class); NewQuickPayOrderResponseForm newquickPayOrderResponseForm = HandleDataUtils.decode(heliRequest, NewQuickPayOrderResponseForm.class,quickPayRequestForm.getProductCode(),quickPayRequestForm.getMerchantNo()); if (!CbDemoConstants.SUCCESS_CODE.equals(newquickPayOrderResponseForm.getErrorCode())) { throw new CommonSystemException(newquickPayOrderResponseForm.getErrorCode(),newquickPayOrderResponseForm.getErrorMessage()); } logger.info(newquickPayOrderResponseForm.getOrderNo()); modelAndView.addObject("responseForm", newquickPayOrderResponseForm); modelAndView.setViewName("newquick/newQuickPayResult"); return modelAndView; }
错误码 | 错误码描述 | 解决方案 |
---|---|---|
测试请求地址 | https://cbtrxtest.helipay.com/cbtrx/rest/member/newBindSMS |
请求地址 | https://cbptrx.helipay.com/cbtrx/rest/member/newBindSMS |
提交方式 | 采用POST方法提交,requestbody传值 Content-Type=[application/json;charset=UTF-8] |
签名算法 | UTF-8字符编码 SHA256签名 AES加密 |
名称 | 参数 | 类型 | 必填 | 示例值 | 说明 |
---|---|---|---|---|---|
产品编码 | productCode | String(20) | 是 | QUICKPAY | |
商户订单号 | orderNo | String(64) | 是 | p_20170302185347 | |
商户编号 | merchantNo | String(10) | 是 | Me10000002 | 合利宝-跨境系统分配的商户编号 |
名称 | 参数 | 类型 | 必填 | 示例值 | 说明 |
---|---|---|---|---|---|
产品编码 | productCode | String(20) | 是 | QUICKPAY | |
商户订单号 | orderNo | String(64) | 是 | p_20170302185347 | |
商户编号 | merchantNo | String(10) | 是 | Me10000002 | 合利宝-跨境系统分配的商户编号 |
响应码 | errorCode | String(10) | 是 | 0000 | 0000 代表请求成功 |
响应信息 | errorMessage | String(200) | 否 | 成功 | 响应信息 错误信息 |
//绑卡短信 @RequestMapping(value = "/newBindMemberCardToSendSMS") public ModelAndView bindMemberCardToSendSMS(@ModelAttribute @Valid NewMemberCardBindSMSRequestForm memberCardBindRequestForm, BindingResult result) { ModelAndView mav = new ModelAndView(); if (result.hasErrors()) { throw new CommonSystemException(CommonSystemException.ILLEGAL_DATA_REQUEST[0], result.getFieldError().getDefaultMessage()); } //请求下发短信 HeliRequest heliRequest = remoteService.postRemoteInvoke(LoadPropertiesUtils.getProperty("newQuickSendMsg"), JSONObject.toJSONString(encodeAndSign(memberCardBindRequestForm, memberCardBindRequestForm.getProductCode(), memberCardBindRequestForm.getMerchantNo())), HeliRequest.class); NewMemberCardSendMessageResponseForm memberCardBindResponseForm = decode(heliRequest, NewMemberCardSendMessageResponseForm.class, memberCardBindRequestForm.getProductCode(), memberCardBindRequestForm.getMerchantNo()); if (!CbDemoConstants.SUCCESS_CODE.equals(memberCardBindResponseForm.getErrorCode())) { throw new CommonSystemException(memberCardBindResponseForm.getErrorCode(), memberCardBindResponseForm.getErrorMessage()); } mav.setViewName("bind/todoNewBindMemberCard"); mav.addObject("responseForm", memberCardBindResponseForm); return mav; }
错误码 | 错误码描述 | 解决方案 |
---|---|---|
测试请求地址 | https://cbtrxtest.helipay.com/cbtrx/rest/pay/applyConfirmSMS |
请求地址 | https://cbptrx.helipay.com/cbtrx/rest/domestic/pay/applyConfirmSMS |
提交方式 | 采用POST方法提交,requestbody传值 Content-Type=[application/json;charset=UTF-8] |
签名算法 | UTF-8字符编码 SHA256签名 AES加密 |
名称 | 参数 | 类型 | 必填 | 示例值 | 说明 |
---|---|---|---|---|---|
产品编码 | productCode | String(20) | 是 | QUICKPAY | |
商户订单号 | orderNo | String(64) | 是 | p_20170302185347 | |
商户编号 | merchantNo | String(10) | 是 | Me10000002 | 合利宝-跨境系统分配的商户编号 |
名称 | 参数 | 类型 | 必填 | 示例值 | 说明 |
---|---|---|---|---|---|
产品编码 | productCode | String(20) | 是 | QUICKPAY | |
商户订单号 | orderNo | String(64) | 是 | p_20170302185347 | |
商户编号 | merchantNo | String(10) | 是 | Me10000002 | 合利宝-跨境系统分配的商户编号 |
响应码 | errorCode | String(10) | 是 | 0000 | 0000 代表请求成功 |
响应信息 | errorMessage | String(200) | 否 | 成功 | 响应信息 错误信息 |
@RequestMapping(value = "/newQuickPayConfirmSms", method = RequestMethod.POST) public ModelAndView quickPayConfirmSMS(@ModelAttribute @Valid NewQuickPayConfirmSMSRequestForm requestForm, BindingResult bindingResult) throws UnsupportedEncodingException { ModelAndView modelAndView = new ModelAndView(); if (bindingResult.hasErrors()) { throw new CommonSystemException(CommonSystemException.ILLEGAL_DATA_REQUEST[0], bindingResult.getFieldError().getDefaultMessage()); } HeliRequest result = HandleDataUtils.encodeAndSign(requestForm,requestForm.getProductCode(),requestForm.getMerchantNo()); HeliRequest heliRequest = remoteService.postRemoteInvoke(LoadPropertiesUtils.getProperty("newQUickURLSMS"), JSONObject.toJSONString(result), HeliRequest.class); NewQuickPayConfirmSMSResponseForm responseForm = HandleDataUtils.decode(heliRequest, NewQuickPayConfirmSMSResponseForm.class,requestForm.getProductCode(),requestForm.getMerchantNo()); if (!CbDemoConstants.SUCCESS_CODE.equals(responseForm.getErrorCode())) { throw new CommonSystemException(responseForm.getErrorCode(),responseForm.getErrorMessage()); } logger.info(responseForm.getOrderNo()); modelAndView.addObject("responseForm", responseForm); modelAndView.setViewName("newquick/newReSendMsgResult"); return modelAndView; }
测试请求地址 | https://cbtrxtest.helipay.com/cbtrx/rest/pay/applyConfirm |
请求地址 | https://cbptrx.helipay.com/cbtrx/rest/domestic/pay/applyConfirm |
提交方式 | 采用POST方法提交,requestbody传值 Content-Type=[application/json;charset=UTF-8] |
签名算法 | UTF-8字符编码 SHA256签名 AES加密 |
名称 | 参数 | 类型 | 必填 | 示例值 | 说明 |
---|---|---|---|---|---|
产品编码 | productCode | String(20) | 是 | QUICKPAY | |
商户订单号 | orderNo | String(64) | 是 | p_20170302185347 | |
商户编号 | merchantNo | String(10) | 是 | Me10000002 | 合利宝-跨境系统分配的商户编号 |
手机验证码 | smsCode | String(10) | 否 | 手机接收验证码,5分钟内有效 |
名称 | 参数 | 类型 | 必填 | 示例值 | 说明 |
---|---|---|---|---|---|
产品编码 | productCode | String(20) | 是 | QUICKPAY | |
商户订单号 | orderNo | String(64) | 是 | p_20170302185347 | |
商户编号 | merchantNo | String(10) | 是 | Me10000002 | 合利宝-跨境系统分配的商户编号 |
响应码 | errorCode | String(10) | 是 | 0000 | 0000 代表请求成功 |
响应信息 | errorMessage | String(200) | 否 | 成功 | 响应信息 错误信息 |
订单状态 | orderStatus | String(20) | 否 | SUCCESS/INIT | 支付成功:SUCCESS,未支付:INIT,待验证:NEED_CONFIRM |
完成时间 | current | String(20) | 否 | 2018-04-01 12:00:00 | 格式yyyy-MM-dd HH:mm:ss |
订单金额 | orderAmount | Number(10.2) | 否 | 0.01 | 单位:元 |
@RequestMapping(value = "/newQuickPayConfirm", method = RequestMethod.POST) public ModelAndView quickPayConfirm(@ModelAttribute @Valid NewQuickPayConfirmRequestForm requestForm, BindingResult bindingResult) throws UnsupportedEncodingException { ModelAndView modelAndView = new ModelAndView(); if (bindingResult.hasErrors()) { throw new CommonSystemException(CommonSystemException.ILLEGAL_DATA_REQUEST[0], bindingResult.getFieldError().getDefaultMessage()); } HeliRequest result = HandleDataUtils.encodeAndSign(requestForm,requestForm.getProductCode(),requestForm.getMerchantNo()); HeliRequest heliRequest = remoteService.postRemoteInvoke(LoadPropertiesUtils.getProperty("newQuickConfirm"), JSONObject.toJSONString(result), HeliRequest.class); NewQuickPayConfirmResponseForm responseForm = HandleDataUtils.decode(heliRequest, NewQuickPayConfirmResponseForm.class,requestForm.getProductCode(),requestForm.getMerchantNo()); if (!CbDemoConstants.SUCCESS_CODE.equals(responseForm.getErrorCode())){ throw new CommonSystemException(responseForm.getErrorCode(),responseForm.getErrorMessage()); } logger.info(responseForm.getOrderNo()); modelAndView.addObject("responseForm", responseForm); modelAndView.setViewName("newquick/newQuickPayResult"); return modelAndView; }
错误码 | 错误码描述 | 解决方案 |
---|---|---|