import com.chinaums.open.api.OpenApiCache;
import com.chinaums.open.api.OpenApiContext;
import com.chinaums.open.api.constants.ConfigBean;
import com.chinaums.open.api.internal.util.http.HttpTransport;
import java.util.UUID;
public class OpenApiSdkTest {
public static void main(String[] args) throws Exception{
String url = "https://api-mop.chinaums.com/v1/netpay/wx/app-pre-order";
//开发者ID
String appId = "平台分配";
//开发者秘钥
String appKey = "平台分配";
//实例化客户端
ConfigBean configBean = new ConfigBean();
OpenApiContext context = new OpenApiContext();
String request = "{\"requestTimestamp\":\"2022-04-14 17:29:10\",
\"merOrderId\":\"327M202204141724489725391\",
\"mid\":\"898340149000005\",
\"tid\":\"00000001\",
\"instMid\":\"APPDEFAULT\",
\"totalAmount\":\"1\",
\"msgId\":\"0DUNOje1Bwtue6XinEs7DWhKS2NmUCVg\",
\"srcReserve\":\"C20220119000001\",
\"subAppId\":\"wxd65fdb19eb954626\",
\"goods\":\"[{\"goodsId\":\"001\",\"goodsName\":\"鸡蛋\",\"quantity\":\"10\",\"price\":\"1\",\"goodsCategory\":\"food meterial\",\"body\":\"two eggs\",\"unit\":\"个\",\"discount\":\"5\",\"subMerchantId\":\"988460101800201\",\"merOrderId\":\"20200225160000001sub01\",\"subOrderAmount\":\"100\"}]\",
\"attachedData\":\"\",
\"expireTime\":\"2022-07-19 16:31:59\",
\"goodsTag\":\"\",
\"orderDesc\":\"测试\",
\"originalAmount\":\"100\",
\"productId\":\"002\",
\"divisionFlag\":\"true\",
\"platformAmount\":\"100\",
\"subOrders\":\"[{\"mid\":\"988460101800201\",\"totalAmount\":\"100\",\"merOrderId\":\"20200225160000001sub01\"}]\",
\"notifyUrl\":\"http://www.test.com/notify\",
\"showUrl\":\"\",
\"secureTransaction\":\"\",
\"tradeType\":\"APP\",
\"merchantUserId\":\"898310148160568\",
\"mobile\":\"131****3453\",
\"limitCreditCard\":\"\",
\"installmentNumber\":\"3\",
\"enablePayChnl\":\"\",
\"retCommParams\":\"{\"foodOrderType\":\"pre_order\"}\",
\"thirdPartyInstalSubsFlag\":\"false\",
\"supportBank\":\"\",
\"invokeType\":\"\",
\"name\":\"张*三\",
\"certType\":\"IDENTITY_CARD\",
\"certNo\":\"110101********9008\",
\"fixBuyer\":\"true\",
\"asynDivisionFlag\":\"true\",
\"preauthTransaction\":\"true\",
\"targetAppScheme\":\"\",
\"ylyxId\":\"\",
\"ylyxName\":\"\",
\"clientIp\":\"\"}";
context.setStartTime(System.currentTimeMillis());
context.setRequestId(UUID.randomUUID().toString().replace("-", ""));
context.setOpenServUrl(url.split("/v")[0].concat("/"));
context.setApiServiceUrl(url);
context.setVersion(url.split("/")[3]);
context.setAppId(appId);
context.setAppKey(appKey);
context.setConfigBean(configBean);
context.setServiceCode(url.split("/v")[1].substring(1));
OpenApiCache.getCurrentToken(context);
System.out.println(HttpTransport.getInstance().doPost(context, request));
}
}
<?php
require_once "../utils/Log.php";
require_once "../utils/Tools.php";
require_once "../DefaultOpenApiClient.php";
class DataRequest
{
public $url = "";
public $serviceCode = "";
public $apiVersion ="";
public $needToken = true;
public $needDataTag = false;
public $data;
function __construct($data, $url)
{
$this->data = $data;
$apiVersion = preg_split("/[/]+/s",$url)[2];
$this->apiVersion = $apiVersion;
$serviceCode = strstr($url,$apiVersion);
$this->url = strstr($url,"/".$apiVersion,true);
$this->serviceCode = preg_replace("/^" . preg_quote($apiVersion, "/") . "/", "", $serviceCode);
}
}
class DataDemo{
public function main(){
$appid = "平台分配";
$appkey = "平台分配";
$url = "https://api-mop.chinaums.com/v1/netpay/wx/app-pre-order";
$data = json_encode(array("requestTimestamp"=>"2022-04-14 17=>29=>10",
"merOrderId"=>"327M202204141724489725391",
"mid"=>"898340149000005",
"tid"=>"00000001",
"instMid"=>"APPDEFAULT",
"totalAmount"=>"1",
"msgId"=>"0DUNOje1Bwtue6XinEs7DWhKS2NmUCVg",
"srcReserve"=>"C20220119000001",
"subAppId"=>"wxd65fdb19eb954626",
"goods"=>"json_encode(array([{"goodsId"=>"001","goodsName"=>"鸡蛋","quantity"=>"10","price"=>"1","goodsCategory"=>"food meterial","body"=>"two eggs","unit"=>"个","discount"=>"5","subMerchantId"=>"988460101800201","merOrderId"=>"20200225160000001sub01","subOrderAmount"=>"100"}]))",
"attachedData"=>"",
"expireTime"=>"2022-07-19 16=>31=>59",
"goodsTag"=>"",
"orderDesc"=>"测试",
"originalAmount"=>"100",
"productId"=>"002",
"divisionFlag"=>"true",
"platformAmount"=>"100",
"subOrders"=>"json_encode(array([{"mid"=>"988460101800201","totalAmount"=>"100","merOrderId"=>"20200225160000001sub01"}]))",
"notifyUrl"=>"http=>//www.test.com/notify",
"showUrl"=>"",
"secureTransaction"=>"",
"tradeType"=>"APP",
"merchantUserId"=>"898310148160568",
"mobile"=>"131****3453",
"limitCreditCard"=>"",
"installmentNumber"=>"3",
"enablePayChnl"=>"",
"retCommParams"=>"{"foodOrderType"=>"pre_order"}",
"thirdPartyInstalSubsFlag"=>"false",
"supportBank"=>"",
"invokeType"=>"",
"name"=>"张*三",
"certType"=>"IDENTITY_CARD",
"certNo"=>"110101********9008",
"fixBuyer"=>"true",
"asynDivisionFlag"=>"true",
"preauthTransaction"=>"true",
"targetAppScheme"=>"",
"ylyxId"=>"",
"ylyxName"=>"",
"clientIp"=>""));
$reqiest = new DataRequest($data,$url);
$client = new DefaultOpenApiClient();
$content = $client->execute($reqiest,$appid,$appkey);
$obj = json_decode($content);
print_r($obj->errCode);
print_r($obj->errInfo);
}
}
$p = new DataDemo();
$p->main();
?>
# -*- coding: utf-8 -*-
from webapi.DefaultOpenApiClient import DefaultOpenApiClient
url = "https://api-mop.chinaums.com/v1/netpay/wx/app-pre-order"
class DataRequest(object):
def __init__(self, data: dict) -> dict:
self.data = data
self.serviceCode = url[len(url.split("/v")[0])+len(url.split("/")[3])+1: len(url)]
self.apiVersion = url.split("/")[3]
self.needToken = True
self.needDataTag = True
appId="平台分配"
appKey="平台分配"
client = DefaultOpenApiClient(appId, appKey)
cls = DataRequest({\"requestTimestamp\":\"2022-04-14 17:29:10\",
\"merOrderId\":\"327M202204141724489725391\",
\"mid\":\"898340149000005\",
\"tid\":\"00000001\",
\"instMid\":\"APPDEFAULT\",
\"totalAmount\":\"1\",
\"msgId\":\"0DUNOje1Bwtue6XinEs7DWhKS2NmUCVg\",
\"srcReserve\":\"C20220119000001\",
\"subAppId\":\"wxd65fdb19eb954626\",
\"goods\":\"[{\"goodsId\":\"001\",\"goodsName\":\"鸡蛋\",\"quantity\":\"10\",\"price\":\"1\",\"goodsCategory\":\"food meterial\",\"body\":\"two eggs\",\"unit\":\"个\",\"discount\":\"5\",\"subMerchantId\":\"988460101800201\",\"merOrderId\":\"20200225160000001sub01\",\"subOrderAmount\":\"100\"}]\",
\"attachedData\":\"\",
\"expireTime\":\"2022-07-19 16:31:59\",
\"goodsTag\":\"\",
\"orderDesc\":\"测试\",
\"originalAmount\":\"100\",
\"productId\":\"002\",
\"divisionFlag\":\"true\",
\"platformAmount\":\"100\",
\"subOrders\":\"[{\"mid\":\"988460101800201\",\"totalAmount\":\"100\",\"merOrderId\":\"20200225160000001sub01\"}]\",
\"notifyUrl\":\"http://www.test.com/notify\",
\"showUrl\":\"\",
\"secureTransaction\":\"\",
\"tradeType\":\"APP\",
\"merchantUserId\":\"898310148160568\",
\"mobile\":\"131****3453\",
\"limitCreditCard\":\"\",
\"installmentNumber\":\"3\",
\"enablePayChnl\":\"\",
\"retCommParams\":\"{\"foodOrderType\":\"pre_order\"}\",
\"thirdPartyInstalSubsFlag\":\"false\",
\"supportBank\":\"\",
\"invokeType\":\"\",
\"name\":\"张*三\",
\"certType\":\"IDENTITY_CARD\",
\"certNo\":\"110101********9008\",
\"fixBuyer\":\"true\",
\"asynDivisionFlag\":\"true\",
\"preauthTransaction\":\"true\",
\"targetAppScheme\":\"\",
\"ylyxId\":\"\",
\"ylyxName\":\"\",
\"clientIp\":\"\"})
response = client.execute(cls)
print(str(response.get("data")))
print(response.get("errCode"))
print(response.get("errInfo"))
print(response.get("resultCode"))
print(response.get("resultInfo"))
微信跳转小程序下单
URL
- 生产环境:
POST
https://api-mop.chinaums.com/v1/netpay/wx/app-pre-order - 测试环境:
POST
https://test-api-open.chinaums.com/v1/netpay/wx/app-pre-order
描述:本接口为商户的订单信息发向银商网络支付前置系统以获取支付要素商户需遵循商户订单号生成规范,即以银商分配的4位来源编号作为账单号的前4位,且在商户系统中此账单号保证唯一。总长度需大于6位,小于32位。银商的推荐规则为(无特殊情况下,建议遵守此规则) 如果需要实名认证,请遵循以下规则: 微信必传姓名name、证件号certNo、强制校验位fixBuyer=T; 支付宝必传姓名name,证件类型certType,证件号certNo,强制校验位fixBuyer=T。注意:支付宝支持的证件类型包括:身份证IDENTITY_CARD、护照PASSPORT、军官证OFFICER_CARD、士兵证SOLDIER_CARD、户口本HOKOU; 云闪付实名认证必传证件类型certType,证件号certNo,强制校验位fixBuyer=T。姓名name选传。注意:云闪付支持的证件类型包括:身份证IDENTITY_CARD、护照PASSPORT、军官证OFFICER_CARD、士兵证SOLDIER_CARD、港澳居民通行证HM_EXIT、台湾居民通行证TW_EXIT、警官证POLICE_CERTIFICATE、外国护照FOREIGNER_RESIDENCE_PERMIT、港澳居民居住证HM_RESIDENCE_PERMIT、台湾居民居住证TW_RESIDENCE_PERMIT 、其他OTHER。云闪付实名当证件类型为IDENTITY_CARD(身份证)时,certNo支持上送身份证号后6位,注意当身份证号最后一位是X时,上送X前面的6位数字; 敏感信息如姓名、证件号和手机号信息需要base64编码。{来源编号(4位)}{时间(yyyyMMddmmHHssSSS)(17位)}{11位随机数}
ContentType:HTTP(S) + JSON
请求头
名称 | 必填 | 描述 | 示例值 |
---|---|---|---|
Authorization | 是 | 认证内容 (认证参考天满开发者中心->接入指引->平台认证方式:开发者中心) | OPEN-BODY-SIG AppId="****",Timestamp="20170606135700",Nonce="99930a147f5353dd8a8f29a5329f37e9",Signature="IPmdGHYCcfN+mto0/02zkwoUF1NT3YqPKaUykMaec1T=" |
请求参数
名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
---|---|---|---|---|---|
requestTimestamp | string | 是 | 报文请求时间 格式:yyyy-MM-dd HH:mm:ss | 2022-04-14 17:29:10 | |
merOrderId | string | 是 | 6..32 | 商户订单号 商户自行生成 | 327M202204141724489725391 |
mid | string | 是 | 8..32 | 商户号 | 898340149000005 |
tid | string | 是 | 2..32 | 终端号 | 00000001 |
instMid | string | 是 | - | 机构商户号 APPDEFAULT | APPDEFAULT |
totalAmount | number | 是 | 1..100000000 | 支付总金额 单位:分 若divisionFlag为true,则: totalAmount =subOrders字段中的所有totalAmount值之和 platformAmount值 =goods中的所有subOrderAmount值之和。 |
1 |
msgId | string | 否 | <=64 | 消息ID,原样返回 | 0DUNOje1Bwtue6XinEs7DWhKS2NmUCVg |
srcReserve | string | 否 | <=255 | 请求系统预留字段 | C20220119000001 |
subAppId | string | 否 | <=32 | 微信子商户appId app跳转银商微信小程序需要上送该参数,值为app应用在微信开放平台分配的appid;云闪付、支付宝/支付宝小程序方式不用上送该参数 | wxd65fdb19eb954626 |
goods | array | 否 | 商品信息 | ||
goodsId | string | 否 | <=64 | 商品ID | 001 |
goodsName | string | 否 | <=256 | 商品名称 | 鸡蛋 |
quantity | string | 否 | 商品数量 | 10 | |
price | string | 否 | 商品单价,单位:分 | 1 | |
goodsCategory | string | 否 | <=64 | 商品分类 | food meterial |
body | string | 否 | <=1024 | 商品说明 | two eggs |
unit | number | 否 | 商品单位 | 个 | |
discount | number | 否 | 商品折扣 | 5 | |
subMerchantId | string | 否 | 15 | 子商户号 | 988460101800201 |
merOrderId | string | 否 | 6..32 | 商户子订单号 | 20200225160000001sub01 |
subOrderAmount | number | 否 | 0..100000000 | 子商户商品总额,单位:分 | 100 |
attachedData | string | 否 | <=255 | 商户附加数据 | |
expireTime | string | 否 | 订单过期时间 为空则使用系统默认过期时间(30分钟),格式:yyyy-MM-dd HH:mm:ss | 2022-07-19 16:31:59 | |
goodsTag | string | 否 | <=32 | 商品标记 用于优惠活动 | |
orderDesc | string | 否 | <=255 | 账单描述 | 测试 |
originalAmount | number | 否 | 1..100000000 | 订单原始金额 单位分,用于记录前端系统打折前的金额 | 100 |
productId | string | 否 | 商品ID | 002 | |
divisionFlag | boolean | 否 | 分账标记 若为true,则goods字段和subOrders字段不能同时为空;且secureTransaction字段上送false或不上送。 | true | |
platformAmount | number | 否 | 100000000 | 平台商户分账金额,单位:分, 若分账标记传,则分账金额必传 | 100 |
subOrders | array | 否 | 子订单信息 在传分账标记的情况下,若传子商户号,子商户分账金额必传,即ubOrders每个元素的mid和totalAmount非空且mid不超过20个。(分账方案subOrders里子商户分账总额+platformAmount要与支付总额totalAmount相等)。 +在传分账标记的情况下,接口中goods和subOrders二者必传其一(建议使用subOrders字段);若传goods则分账信息会按goods中每个商品的总额占支付总额减平台分账金额等比例生成;若传subOrders,则分账信息则严格按subOrders里的分账方案生成。 | ||
mid | string | 否 | 15 | 子商户号 | 988460101800201 |
totalAmount | number | 否 | 0..100000000 | 子商户分账金额,单位:分 | 100 |
merOrderId | string | 否 | 6..32 | 商户子订单号 | 20200225160000001sub01 |
notifyUrl | string | 否 | <=255 | 支付结果通知地址 | http://www.test.com/notify |
showUrl | string | 否 | <=255 | 订单展示页面 | |
secureTransaction | string | 否 | 担保交易标识 取值:true或false,默认false 若上送为true,则交易的金额将会被暂缓结算。 调用担保完成接口后,完成部分金额会在t+1日结算给商户,剩余部分金额退还用户。 调用担保撤销接口,则全部资金退还给用户。 30天后没有主动调用担保完成 且 没有主动调用担保撤销的交易 将会自动按撤销处理。 |
||
tradeType | string | 否 | 交易类型 微信必传:APP | APP | |
merchantUserId | string | 否 | <=32 | 商户用户号 | 898310148160568 |
mobile | string | 否 | <=20 | 实名认证手机号 Base64编码 | 131****3453 |
limitCreditCard | string | 否 | 是否需要限制信用卡支付 取值:true或false,默认false | ||
installmentNumber | number | 否 | 花呗分期数 取值:仅支持3、6、12 | 3 | |
enablePayChnl | string | 否 | 支付宝支付方式 仅支持支付宝,一笔订单中仅允许商户一次上送一个值,可上送的取值范围为:balance(余额),moneyFund(余额宝),pcredit(花呗),pcreditpayInstallment(花呗分期),creditCard(信用卡),debitCardExpress(借记卡) | ||
retCommParams | object | 否 | 返佣字段 目前支持支付宝渠道 | ||
foodOrderType | string | 是 | 扫码点餐字段 pre_order | pre_order | |
thirdPartyInstalSubsFlag | boolean | 否 | 是否开启第三方分期交易贴息 true为本笔交易启用第三方贴息,false或者不传为本笔交易不启用第三方贴息。目前只针对花呗分期交易。 | false | |
supportBank | string | 否 | 支持的银行 仅支持云闪付支付支持直接拉起特定银行APP,目前支持: CCB(中国建设银行)、 CNCB(中信银行手机银行)、 CEB(光大银行手机银行)、 PAB(平安口袋银行)。 |
||
invokeType | string | 否 | 调起方式 仅支持云闪付支付 在统一收银台直通模式业务下,商户调起银行APP的方式 APP_H5:APP+H5 APP:APP H5:H5 默认取值APP_H5。若上送此字段,则必须上送supportBank字段,否则将拒绝交易。 |
||
name | string | 否 | <=32 | 实名认证姓名 Base64编码 | 张*三 |
certType | string | 否 | <=32 | 实名认证证件类型 | IDENTITY_CARD |
certNo | string | 否 | <=64 | 实名认证证件号 Base64编码 银联云闪付支持上送身份证后六位(当身份证最后一位是 X时,上送 X前面的 6位数字),注意同样需要Base64编码 | 110101****9008 |
fixBuyer | string | 否 | <=32 | 是否需要实名认证 需要实名认证时置为 T | true |
asynDivisionFlag | boolean | 否 | 异步分账标记 若为true,则goods字段和subOrders字段不能同时为空;且secureTransaction字段上送false或不上送。 退货订单不允许做子订单操作 已确认的子订单,不允许隔天再确认 | true | |
preauthTransaction | boolean | 否 | 预授权交易标识 取值:true或false,默认false。若上送为true,则交易的金额将会被银行冻结。调用预授权完成接口后,完成部分金额会在t+1日结算给商户,剩余部分金额在用户银行卡中解冻。 | true | |
targetAppScheme | string | 否 | 128 | APP跳转支付宝小程序支付的回跳schemeUrl,用于指定APP跳转支付宝小程序后的回跳路径,传值规范为iOS:schemeurl;Android:schemeurl。若不上送则默认返回入网配置的默认路径。 | |
ylyxId | string | 否 | 5..15 | 银联专属营销优惠代码 该字段仅用于经银联审批通过的,特定专属营销活动场景下使用 | |
ylyxName | string | 否 | 1..40 | 银联专属营销优惠名称 该字段仅用于经银联审批通过的,特定专属营销活动场景下使用 | |
clientIp | string | 否 | - | 客户端IP 用户客户端的ip地址 |
响应示例
{
"errCode":"SUCCESS",
"errMsg":"",
"responseTimestamp":"2022-07-19 16:29:59",
"mid":"898310148160568",
"tid":"88880001",
"msgId":"0DUNOje1Bwtue6XinEs7DWhKS2NmUCVg",
"srcReserve":"C20220119000001",
"merName":"测试商户",
"merOrderId":"13DA002023071900000000003327",
"seqId":"20230719162959",
"settleRefId":"20230719162959",
"status":"",
"totalAmount":"100",
"targetOrderId":"",
"targetSys":"WXPay",
"targetStatus":"",
"appPayRequest":
{
},
"prepayId":"ori=13DA002023071900000000003327",
"targetMid":"486812004",
"yxlmAmount":"10"
}
响应参数
名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
---|---|---|---|---|---|
errCode | string | 是 | <=64 | 错误代码 平台错误码 业务错误码 |
SUCCESS |
errMsg | string | 否 | <=255 | 错误说明 | |
responseTimestamp | string | 是 | 报文响应时间 格式:yyyy-MM-dd HH:mm:ss | 2022-07-19 16:29:59 | |
mid | string | 是 | 商户号 | 898310148160568 | |
tid | string | 是 | 终端号 | 88880001 | |
msgId | string | 否 | <=64 | 消息ID | 0DUNOje1Bwtue6XinEs7DWhKS2NmUCVg |
srcReserve | string | 否 | <=255 | 请求系统预留字段 | C20220119000001 |
merName | string | 否 | 商户名称 | 测试商户 | |
merOrderId | string | 否 | 商户订单号 | 13DA002023071900000000003327 | |
seqId | string | 否 | 平台流水号 | 20230719162959 | |
settleRefId | string | 否 | 清分ID 如果来源方传了bankRefId就等于bankRefId,否则等于seqId | 20230719162959 | |
status | string | 否 | 交易状态 | ||
totalAmount | number | 否 | 支付总金额,单位:分 | 100 | |
targetOrderId | string | 否 | 第三方订单号 | ||
targetSys | string | 否 | 目标平台代码 | WXPay | |
targetStatus | string | 否 | 目标平台状态 | ||
appPayRequest | object | 否 | APP支付用的请求报文,带有签名信息 | ||
prepayId | string | 否 | <=64 | 支付ID,用于APP支付和公众号支付 | ori=13DA002023071900000000003327 |
targetMid | string | 否 | 支付渠道商户号 各渠道情况不同,酌情转换。 | 486812004 | |
yxlmAmount | number | 否 | 营销联盟优惠金额,单位:分 | 10 |