银联商务天满服务平台
Java PHP Python



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 10:10:13\",
                    \"merOrderId\":\"327M20220419111222\",
                    \"mid\":\"898201612345678\",
                    \"tid\":\"88880001\",
                    \"totalAmount\":\"1\",
                    \"subAppId\":\"\",
                    \"tradeType\":\"MINI\",
                    \"subOpenId\":\"\",
                    \"msgId\":\"001\",
                    \"srcReserve\":\"test\",
                    \"instMid\":\"MINIDEFAULT\",
                    \"goods\":\"[{\"goodsId\":\"001\",\"goodsName\":\"鸡蛋\",\"quantity\":\"10\",\"price\":\"1\",\"goodsCategory\":\"food meterial\",\"body\":\"two eggs\",\"unit\":\"个\",\"discount\":\"5\",\"subMerchantId\":\"988460101800201\",\"merOrderId\":\"dd20220419111222\",\"subOrderAmount\":\"100\"}]\",
                    \"attachedData\":\"\",
                    \"expireTime\":\"2022-04-22 10:10:13\",
                    \"goodsTag\":\"\",
                    \"orderDesc\":\"测试\",
                    \"originalAmount\":\"10\",
                    \"productId\":\"002\",
                    \"divisionFlag\":\"true\",
                    \"asynDivisionFlag\":\"true\",
                    \"platformAmount\":\"1\",
                    \"subOrders\":\"[{\"mid\":\"898201612345678\",\"merOrderId\":\"dd20220419111222\",\"totalAmount\":\"1\"}]\",
                    \"notifyUrl\":\"http://www.test.com/notify\",
                    \"secureTransaction\":\"false\",
                    \"userId\":\"\",
                    \"limitCreditCard\":\"false\",
                    \"installmentNumber\":\"3\",
                    \"name\":\"张*三\",
                    \"mobile\":\"131****3453\",
                    \"certType\":\"IDENTITY_CARD\",
                    \"certNo\":\"110101********9008\",
                    \"fixBuyer\":\"false\",
                    \"retCommParams\":\"{\"foodOrderType\":\"pre_order\",\"parkId\":\"\",\"vehicleNo\":\"\"}\",
                    \"feeRatio\":\"5\",
                    \"costSubsidy\":\"默认false\",
                    \"preauthTransaction\":\"false\",
                    \"clientIp\":\"1.1.1.1\"}";
        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 10=>10=>13",
                    "merOrderId"=>"327M20220419111222",
                    "mid"=>"898201612345678",
                    "tid"=>"88880001",
                    "totalAmount"=>"1",
                    "subAppId"=>"",
                    "tradeType"=>"MINI",
                    "subOpenId"=>"",
                    "msgId"=>"001",
                    "srcReserve"=>"test",
                    "instMid"=>"MINIDEFAULT",
                    "goods"=>"json_encode(array([{"goodsId"=>"001","goodsName"=>"鸡蛋","quantity"=>"10","price"=>"1","goodsCategory"=>"food meterial","body"=>"two eggs","unit"=>"","discount"=>"5","subMerchantId"=>"988460101800201","merOrderId"=>"dd20220419111222","subOrderAmount"=>"100"}]))",
                    "attachedData"=>"",
                    "expireTime"=>"2022-04-22 10=>10=>13",
                    "goodsTag"=>"",
                    "orderDesc"=>"测试",
                    "originalAmount"=>"10",
                    "productId"=>"002",
                    "divisionFlag"=>"true",
                    "asynDivisionFlag"=>"true",
                    "platformAmount"=>"1",
                    "subOrders"=>"json_encode(array([{"mid"=>"898201612345678","merOrderId"=>"dd20220419111222","totalAmount"=>"1"}]))",
                    "notifyUrl"=>"http=>//www.test.com/notify",
                    "secureTransaction"=>"false",
                    "userId"=>"",
                    "limitCreditCard"=>"false",
                    "installmentNumber"=>"3",
                    "name"=>"张*三",
                    "mobile"=>"131****3453",
                    "certType"=>"IDENTITY_CARD",
                    "certNo"=>"110101********9008",
                    "fixBuyer"=>"false",
                    "retCommParams"=>"{"foodOrderType"=>"pre_order","parkId"=>"","vehicleNo"=>""}",
                    "feeRatio"=>"5",
                    "costSubsidy"=>"默认false",
                    "preauthTransaction"=>"false",
                    "clientIp"=>"1.1.1.1"));
        $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 10:10:13\",
                    \"merOrderId\":\"327M20220419111222\",
                    \"mid\":\"898201612345678\",
                    \"tid\":\"88880001\",
                    \"totalAmount\":\"1\",
                    \"subAppId\":\"\",
                    \"tradeType\":\"MINI\",
                    \"subOpenId\":\"\",
                    \"msgId\":\"001\",
                    \"srcReserve\":\"test\",
                    \"instMid\":\"MINIDEFAULT\",
                    \"goods\":\"[{\"goodsId\":\"001\",\"goodsName\":\"鸡蛋\",\"quantity\":\"10\",\"price\":\"1\",\"goodsCategory\":\"food meterial\",\"body\":\"two eggs\",\"unit\":\"个\",\"discount\":\"5\",\"subMerchantId\":\"988460101800201\",\"merOrderId\":\"dd20220419111222\",\"subOrderAmount\":\"100\"}]\",
                    \"attachedData\":\"\",
                    \"expireTime\":\"2022-04-22 10:10:13\",
                    \"goodsTag\":\"\",
                    \"orderDesc\":\"测试\",
                    \"originalAmount\":\"10\",
                    \"productId\":\"002\",
                    \"divisionFlag\":\"true\",
                    \"asynDivisionFlag\":\"true\",
                    \"platformAmount\":\"1\",
                    \"subOrders\":\"[{\"mid\":\"898201612345678\",\"merOrderId\":\"dd20220419111222\",\"totalAmount\":\"1\"}]\",
                    \"notifyUrl\":\"http://www.test.com/notify\",
                    \"secureTransaction\":\"false\",
                    \"userId\":\"\",
                    \"limitCreditCard\":\"false\",
                    \"installmentNumber\":\"3\",
                    \"name\":\"张*三\",
                    \"mobile\":\"131****3453\",
                    \"certType\":\"IDENTITY_CARD\",
                    \"certNo\":\"110101********9008\",
                    \"fixBuyer\":\"false\",
                    \"retCommParams\":\"{\"foodOrderType\":\"pre_order\",\"parkId\":\"\",\"vehicleNo\":\"\"}\",
                    \"feeRatio\":\"5\",
                    \"costSubsidy\":\"默认false\",
                    \"preauthTransaction\":\"false\",
                    \"clientIp\":\"1.1.1.1\"})
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位。银商的推荐规则为(无特殊情况下,建议遵守此规则) 如果需要实名认证,请遵循以下规则: 微信必传姓名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)

请求头

名称 必填 描述 示例值
Authorization 认证内容 (认证参考天满开发者中心->接入指引->平台认证方式:开发者中心 OPEN-BODY-SIG AppId="****",Timestamp="20170606135700",Nonce="99930a147f5353dd8a8f29a5329f37e9",Signature="IPmdGHYCcfN+mto0/02zkwoUF1NT3YqPKaUykMaec1T="

请求参数

名称 类型 必填 最大长度 描述 示例值
requestTimestamp string 报文请求时间 格式yyyy-MM-dd HH:mm:ss 2022-04-20 10:10:13
merOrderId string 6..32 商户订单号 商户自行生成 327M20220419111222
mid string 8..32 商户号 898201612345678
tid string 2..32 终端号 88880001
totalAmount number 1..100000000 支付总金额 单位分 若divisionFlag为true,则: totalAmount =subOrders字段中的所有totalAmount值之和+platformAmount值 =goods中的所有subOrderAmount值之和。 1
subAppId string <=32 微信子商户appId
tradeType string 交易类型 值为MINI MINI
subOpenId string - 用户子标识 微信必传,需要商户自行调用微信平台接口获取,具体获取方式请根据微信接口文档。
msgId string <=64 消息ID,原样返回 001
srcReserve string <=255 请求系统预留字段 test
instMid string - 业务类型 MINIDEFAULT MINIDEFAULT
goods array 商品信息
   goodsId string <=64 商品ID 001
   goodsName string <=256 商品名称 鸡蛋
   quantity number 商品数量 10
   price number 商品单价,单位:分 1
   goodsCategory string <=64 商品分类 food meterial
   body string <=1024 商品说明 two eggs
   unit string 商品单位
   discount number 商品折扣 5
   subMerchantId string 8..32 子商户号 988460101800201
   merOrderId string 6..32 商户子订单号 dd20220419111222
   subOrderAmount number 0..100000000 子商户商品总额,单位:分 100
attachedData string <=255 商户附加数据
expireTime string 订单过期时间 为空则使用系统默认过期时间(30分钟),格式yyyy-MM-dd HH:mm:ss 2022-04-22 10:10:13
goodsTag string <=32 商品标记 用于优惠活动
orderDesc string <=255 账单描述 微信支付时 上送值长度不超过128字节 测试
originalAmount number 1..100000000 订单原始金额 单位分,用于记录前端系统打折前的金额 10
productId string 商品ID 002
divisionFlag boolean 分账标记 若为true,则goods字段和subOrders字段不能同时为空;且secureTransaction字段上送false或不上送。 true
asynDivisionFlag boolean 异步分账标记 若为true,则goods字段和subOrders字段不能同时为空;且secureTransaction字段上送false或不上送。 退货订单不允许做子订单操作 已确认的子订单,不允许隔天再确认 true
platformAmount number 1..100000000 平台商户分账金额 若分账标记传,则分账金额必传 1
subOrders array 子订单信息 在传分账标记的情况下,若传子商户号,子商户分账金额必传,即ubOrders每个元素的mid和totalAmount非空且mid不超过20个。(分账方案subOrders里子商户分账总额+platformAmount要与支付总额totalAmount相等)。 在传分账标记的情况下,接口中goods和subOrders二者必传其一;若传goods则分账信息会按goods中每个商品的总额占支付总额减平台分账金额等比例生成;若传subOrders,则分账信息则严格按subOrders里的分账方案生成。
   mid string 15 子商户号 898201612345678
   merOrderId string 6..32 商户子订单号 dd20220419111222
   totalAmount number 0..100000000 子商户分账金额 1
notifyUrl string <=255 支付结果通知地址 http://www.test.com/notify
secureTransaction string 担保交易标识 取值:true或false,默认false 若上送为true,则交易的金额将会被暂缓结算。 调用担保完成接口后,完成部分金额会在t+1日结算给商户,剩余部分金额退还用户。 调用担保撤销接口,则全部资金退还给用户。 30天后没有主动调用担保完成 且 没有主动调用担保撤销的交易 将会自动按撤销处理。 false
userId string 用户子标识 支付宝必传,需要商户自行调用支付宝接口获取,具体获取方式请根据支付宝接口文档。
limitCreditCard string 是否需要限制信用卡支付 取值:true或false,默认false false
installmentNumber number 花呗分期数 取值:仅支持3、6、12 3
name string <=32 实名认证姓名 Base64编码 张*三
mobile string <=20 实名认证手机号 Base64编码 131****3453
certType string 实名认证证件类型 IDENTITY_CARD
certNo string <=64 实名认证证件号 Base64编码 银联云闪付支持上送身份证后六位(当身份证最后一位是 X时,上送 X前面的 6位数字),注意同样需要Base64编码 110101****9008
fixBuyer string <=32 是否需要实名认证 需要实名认证时置为T false
retCommParams object 返佣字段 目前支持支付宝渠道
   foodOrderType string 扫码点餐字段 pre_order pre_order
   parkId string 32 停车场ID,用于支付宝停车场活动
   vehicleNo string 32 车牌号,用于支付宝停车场活动
feeRatio string 手续费比例 新悦融益业务 该字段必传 5
costSubsidy string 确认成本补贴 新悦融益业务 该字段必传;
是否成本补贴,
true为不判断手续费比例,
false按正常判断,
默认false
默认false
preauthTransaction boolean 预授权交易标识 取值:true或false,默认false。若上送为true,则交易的金额将会被银行冻结。调用预授权完成接口后,完成部分金额会在t+1日结算给商户,剩余部分金额在用户银行卡中解冻。(仅云闪付小程序支持) false
clientIp string - 客户端IP 用户客户端的ip地址 1.1.1.1

响应示例

{
  "errCode":"SUCCESS",
  "errMsg":"微信下单",
  "responseTimestamp":"2022-04-20 10:10:13",
  "mid":"898310148160568",
  "tid":"88880001",
  "msgId":"001",
  "srcReserve":"test",
  "merName":"测试商户",
  "merOrderId":"13DA002023071900000000003327",
  "seqId":"20230719162959",
  "settleRefId":"20230719162959",
  "status":"WAIT_BUYER_PAY",
  "totalAmount":"500",
  "targetOrderId":"64342023071922595938541723006782",
  "targetSys":"WXPay",
  "targetStatus":"SUCCESS|SUCCESS",
  "miniPayRequest":
  {

  },
  "targetMid":"",
  "yxlmAmount":"100"
}

响应参数

名称 类型 必填 最大长度 描述 示例值
errCode string <=64 错误代码
平台错误码
业务错误码
SUCCESS
errMsg string <=255 错误说明 微信下单
responseTimestamp string 报文响应时间 格式yyyy-MM-dd HH:mm:ss 2022-04-20 10:10:13
mid string 商户号 898310148160568
tid string 终端号 88880001
msgId string <=64 消息ID 001
srcReserve string <=255 请求系统预留字段 test
merName string 商户名称 测试商户
merOrderId string 商户订单号 13DA002023071900000000003327
seqId string 平台流水号 20230719162959
settleRefId string 清分ID 如果来源方传了bankRefId就等于bankRefId,否则等于seqId 20230719162959
status string 交易状态 WAIT_BUYER_PAY
totalAmount number 支付总金额 500
targetOrderId string 第三方订单号 64342023071922595938541723006782
targetSys string 目标平台代码 WXPay
targetStatus string 目标平台的状态 SUCCESS
miniPayRequest object 小程序支付用的请求报文,带有签名信息 调用渠道支付密码框页面js参考链接
targetMid string 支付渠道商户号 各渠道情况不同,酌情转换。
yxlmAmount number 营销联盟优惠金额 仅享受联盟优惠的订单,查询返回 100

错误码