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/unified-order";
//开发者ID
String appId = "平台分配";
//开发者秘钥
String appKey = "平台分配";
//实例化客户端
ConfigBean configBean = new ConfigBean();
OpenApiContext context = new OpenApiContext();
String request = "{\"requestTimestamp\":\"2022-04-20 15:50:10\",
\"merOrderId\":\"327M202204141724489725391331\",
\"mid\":\"898201612345678\",
\"tid\":\"88880001\",
\"instMid\":\"YUEDANDEFAULT\",
\"tradeType\":\"JSAPI\",
\"msgId\":\"001\",
\"srcReserve\":\"webpay\",
\"divisionFlag\":\"\",
\"platformAmount\":\"\",
\"goods\":\"[{\"goodsId\":\"001\",\"goodsName\":\"鸡蛋\",\"quantity\":\"10\",\"price\":\"1\",\"goodsCategory\":\"food meterial\",\"body\":\"two eggs\",\"subMerchantId\":\"988460101800201\",\"subOrderAmount\":\"1\"}]\",
\"subOrders\":\"[{\"mid\":\"898201612345678\",\"totalAmount\":\"1\",\"merOrderId\":\"20200225160000001sub01\"}]\",
\"attachedData\":\"336000_0003\",
\"orderDesc\":\" 测试\",
\"goodsTag\":\"\",
\"originalAmount\":\"1\",
\"expireTime\":\"\",
\"totalAmount\":\"1\",
\"notifyUrl\":\"http://www.test.com/notify\",
\"returnUrl\":\"\",
\"systemId\":\"\",
\"subAppId\":\"\",
\"subOpenId\":\"\",
\"name\":\"张*三\",
\"mobile\":\"131****3453\",
\"certType\":\"IDENTITY_CARD\",
\"certNo\":\"110101********9008\",
\"fixBuyer\":\"true\",
\"limitCreditCard\":\"true\",
\"secureTransaction\":\"true\",
\"userId\":\"\",
\"code\":\"\",
\"retCommParams\":\"{\"foodOrderType\":\"pre_order\",\"brandId\":\"001\",\"storeId\":\"001\",\"tableNo\":\"001\",\"parkId\":\"\",\"vehicleNo\":\"\"}\",
\"userAgent\":\"\",
\"rstMipPay\":\"\",
\"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/unified-order";
$data = json_encode(array("requestTimestamp"=>"2022-04-20 15=>50=>10",
"merOrderId"=>"327M202204141724489725391331",
"mid"=>"898201612345678",
"tid"=>"88880001",
"instMid"=>"YUEDANDEFAULT",
"tradeType"=>"JSAPI",
"msgId"=>"001",
"srcReserve"=>"webpay",
"divisionFlag"=>"",
"platformAmount"=>"",
"goods"=>"json_encode(array([{"goodsId"=>"001","goodsName"=>"鸡蛋","quantity"=>"10","price"=>"1","goodsCategory"=>"food meterial","body"=>"two eggs","subMerchantId"=>"988460101800201","subOrderAmount"=>"1"}]))",
"subOrders"=>"json_encode(array([{"mid"=>"898201612345678","totalAmount"=>"1","merOrderId"=>"20200225160000001sub01"}]))",
"attachedData"=>"336000_0003",
"orderDesc"=>" 测试",
"goodsTag"=>"",
"originalAmount"=>"1",
"expireTime"=>"",
"totalAmount"=>"1",
"notifyUrl"=>"http=>//www.test.com/notify",
"returnUrl"=>"",
"systemId"=>"",
"subAppId"=>"",
"subOpenId"=>"",
"name"=>"张*三",
"mobile"=>"131****3453",
"certType"=>"IDENTITY_CARD",
"certNo"=>"110101********9008",
"fixBuyer"=>"true",
"limitCreditCard"=>"true",
"secureTransaction"=>"true",
"userId"=>"",
"code"=>"",
"retCommParams"=>"{"foodOrderType"=>"pre_order","brandId"=>"001","storeId"=>"001","tableNo"=>"001","parkId"=>"","vehicleNo"=>""}",
"userAgent"=>"",
"rstMipPay"=>"",
"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/unified-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-20 15:50:10\",
\"merOrderId\":\"327M202204141724489725391331\",
\"mid\":\"898201612345678\",
\"tid\":\"88880001\",
\"instMid\":\"YUEDANDEFAULT\",
\"tradeType\":\"JSAPI\",
\"msgId\":\"001\",
\"srcReserve\":\"webpay\",
\"divisionFlag\":\"\",
\"platformAmount\":\"\",
\"goods\":\"[{\"goodsId\":\"001\",\"goodsName\":\"鸡蛋\",\"quantity\":\"10\",\"price\":\"1\",\"goodsCategory\":\"food meterial\",\"body\":\"two eggs\",\"subMerchantId\":\"988460101800201\",\"subOrderAmount\":\"1\"}]\",
\"subOrders\":\"[{\"mid\":\"898201612345678\",\"totalAmount\":\"1\",\"merOrderId\":\"20200225160000001sub01\"}]\",
\"attachedData\":\"336000_0003\",
\"orderDesc\":\" 测试\",
\"goodsTag\":\"\",
\"originalAmount\":\"1\",
\"expireTime\":\"\",
\"totalAmount\":\"1\",
\"notifyUrl\":\"http://www.test.com/notify\",
\"returnUrl\":\"\",
\"systemId\":\"\",
\"subAppId\":\"\",
\"subOpenId\":\"\",
\"name\":\"张*三\",
\"mobile\":\"131****3453\",
\"certType\":\"IDENTITY_CARD\",
\"certNo\":\"110101********9008\",
\"fixBuyer\":\"true\",
\"limitCreditCard\":\"true\",
\"secureTransaction\":\"true\",
\"userId\":\"\",
\"code\":\"\",
\"retCommParams\":\"{\"foodOrderType\":\"pre_order\",\"brandId\":\"001\",\"storeId\":\"001\",\"tableNo\":\"001\",\"parkId\":\"\",\"vehicleNo\":\"\"}\",
\"userAgent\":\"\",
\"rstMipPay\":\"\",
\"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/unified-order - 测试环境:
POST
https://test-api-open.chinaums.com/v1/netpay/wx/unified-order
描述:本接口为商户的订单信息发向银商网络支付前置系统以获取支付要素商户需遵循商户订单号生成规范,即以银商分配的4位来源编号作为账单号的前4位,且在商户系统中此账单号保证唯一。总长度需大于6位,小于32位。银商的推荐规则为(无特殊情况下,建议遵守此规则):{来源编号(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-20 15:50:10 | |
merOrderId | string | 是 | 6..32 | 商户订单号 商户自行生成 | 327M202204141724489725391331 |
mid | string | 是 | 15 | 商户号 | 898201612345678 |
tid | string | 是 | 8 | 终端号 | 88880001 |
instMid | string | 是 | 8..32 | 业务类型 YUEDANDEFAULT | YUEDANDEFAULT |
tradeType | string | 是 | 交易类型 JSAPI | JSAPI | |
msgId | string | 否 | <=64 | 消息ID 原样返回 | 001 |
srcReserve | string | 否 | <=255 | 请求系统预留字段 | webpay |
divisionFlag | boolean | 否 | 分账标记 暂时只支持微信、支付宝支付和银联云闪付。 若为true,则goods字段和subOrders字段不能同时为空,且secureTransaction字段上送false或不上送。 | ||
platformAmount | number | 否 | 0..100000000 | 平台商户分账金额 若分账标记传,则分账金额必传 | |
goods | array | 否 | 商品信息 在传分账标记的情况下,若传子商户号,子商户商品金额必传,即goods字段中每个元素中subMerchantId与subOrderAmount不能为空,元素不能超过20个。(goods里所有子商户商品总额要与支付总额totalAmount相等)。 | ||
goodsId | string | 否 | 商品ID | 001 | |
goodsName | string | 否 | 商品名称 | 鸡蛋 | |
quantity | string | 否 | 商品数量 | 10 | |
price | string | 否 | 商品单价(分) | 1 | |
goodsCategory | string | 否 | 商品分类 | food meterial | |
body | string | 否 | 商品说明 | two eggs | |
subMerchantId | string | 否 | 15 | 子商户号 | 988460101800201 |
subOrderAmount | number | 否 | 0..100000000 | 子商户商品总额 | 1 |
subOrders | array | 否 | 子订单信息 在传分账标记的情况下,若传子商户号,子商户分账金额必传,即ubOrders每个元素的mid和totalAmount非空且mid不超过20个。(分账方案subOrders里子商户分账总额+platformAmount要与支付总额totalAmount相等)。 +详见接口下方备注部分 | ||
mid | string | 否 | 15 | 子商户号 | 898201612345678 |
totalAmount | number | 否 | 0..100000000 | 子商户分账金额 | 1 |
merOrderId | string | 否 | 6..32 | 商户子订单号 | 20200225160000001sub01 |
attachedData | string | 否 | <=255 | 商户附加数据 | 336000_0003 |
orderDesc | string | 否 | <=255 | 账单描述 | 测试 |
goodsTag | string | 否 | <=32 | 商品标记 用于优惠活动 | |
originalAmount | number | 否 | 1..100000000 | 订单原始金额 单位分,用于记录前端系统打折前的金额 | 1 |
expireTime | string | 否 | 订单过期时间 订单过期时间,为空则使用系统默认过期时间(30分钟),格式yyyy-MM-dd HH:mm:ss | ||
totalAmount | number | 否 | 1..100000000 | 支付总金额 单位分 若divisionFlag为true,则: totalAmount =subOrders字段中的所有totalAmount值之和 platformAmount值 =goods中的所有subOrderAmount值之和。 |
1 |
notifyUrl | string | 否 | <=255 | 支付结果通知地址 | http://www.test.com/notify |
returnUrl | string | 否 | <=255 | 网页跳转地址 | |
systemId | string | 否 | <=32 | 系统ID | |
subAppId | string | 否 | <=32 | 微信子商户appId | |
subOpenId | string | 否 | 用户子标识 微信必传,需要商户自行调用微信平台接口获取,具体获取方式 请根据微信接口文档 | ||
name | string | 否 | <=32 | 实名认证姓名 Base64编码 | 张*三 |
mobile | string | 否 | <=20 | 实名认证手机号 Base64编码 | 131****3453 |
certType | string | 否 | 证件类型 | IDENTITY_CARD | |
certNo | string | 否 | <=32 | 实名认证证件号 Base64编码 | 110101****9008 |
fixBuyer | string | 否 | <=32 | 是否需要实名认证 需要实名认证时置为T | true |
limitCreditCard | string | 否 | 是否需要限制信用卡支付 取值:true或false,默认false | true | |
secureTransaction | string | 否 | 担保交易标识 取值:true或false,默认false若上送为true,则交易的金额将会被暂缓结算。调用担保完成接口后,完成部分金额会在t+1日结算给商户,剩余部分金额退还用户。调用担保撤销接口,则全部资金退还给用户。30天后没有主动调用担保完成 且 没有主动调用担保撤销的交易 将会自动按撤销处理。 | true | |
userId | string | 否 | 支付宝用户标识或者云闪付用户标识 支付宝必传,云闪付userId和code必传其一 | ||
code | string | 否 | 获取APP用户信息的临时授权码 云闪付userId和code必传其一 | ||
retCommParams | object | 否 | 扫码点餐信息 扫码点餐信息,支付宝只需上送扫码foodOrderType字段,云闪付只需上送brandId、storeId、tableNo字段提醒: 1.请求报文中retCommParams字段示例如{"brandId":"MY_STYLE","storeId":"S001","tableNo":"T001"}(见文档请求示例报文) 2.二级字段foodOrderType最大长度为32位。 |
||
foodOrderType | string | 否 | <=32 | 扫码点餐字段 扫码点餐类型取值: qr_order:店内扫码点餐 pre_order:预点到店自提 home_delivery:外送到家 direct_payment:直接付款 other:其他 |
pre_order |
brandId | string | 否 | <=32 | 品牌标识 | 001 |
storeId | string | 否 | <=32 | 门店标识 | 001 |
tableNo | string | 否 | <=32 | 桌号 | 001 |
parkId | string | 否 | 32 | 停车场ID,用于支付宝停车场活动 | |
vehicleNo | string | 否 | 32 | 车牌号,用于支付宝停车场活动 | |
userAgent | string | 否 | User-Agent,用户代理 若上送code,且非宝信交易,则必传 | ||
rstMipPay | boolean | 否 | 默认为false。 true:限制未成年人支付 false:不限 支持微信,支付宝渠道 | ||
clientIp | string | 否 | - | 客户端IP 用户客户端的ip地址 |
响应示例
{
"errCode":"",
"errMsg":"",
"responseTimestamp":"2022-07-19 16:29:59",
"mid":"898310148160568",
"tid":"88880001",
"msgId":"0DUNOje1Bwtue6XinEs7DWhKS2NmUCVg",
"srcReserve":"保留字段",
"merName":"测试商户",
"merOrderId":"13DA002023071900000000003327",
"seqId":"20230719162959",
"settleRefId":"20230719162959",
"status":"",
"totalAmount":"1",
"targetOrderId":"",
"targetSys":"WXPay",
"targetStatus":"SUCCESS|SUCCESS",
"jsPayRequest":
{
},
"redirectUrl":"",
"targetMid":""
}
响应参数
名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
---|---|---|---|---|---|
errCode | string | 是 | <=64 | 错误代码 平台错误码 业务错误码 |
|
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 | 请求系统预留字段 | 保留字段 |
merName | string | 否 | 商户名称 | 测试商户 | |
merOrderId | string | 否 | 商户订单号 | 13DA002023071900000000003327 | |
seqId | string | 否 | 平台流水号 | 20230719162959 | |
settleRefId | string | 否 | 清分ID 如果来源方传了bankRefId就等于bankRefId,否则等于seqId | 20230719162959 | |
status | string | 否 | 交易状态 | ||
totalAmount | number | 否 | 支付总金额 | 1 | |
targetOrderId | string | 否 | 第三方订单号 | ||
targetSys | string | 否 | 目标平台代码 | WXPay | |
targetStatus | string | 否 | 目标平台状态 | SUCCESS | |
jsPayRequest | object | 否 | JSAPI支付用的请求报文,带有签名信息 | ||
redirectUrl | string | 否 | 云闪付支付跳转url | ||
targetMid | string | 否 | 支付渠道商户号,各渠道情况不同,酌情转换 |