银联商务天满服务平台
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/applepay/order";
        //开发者ID
        String appId = "平台分配";
        //开发者秘钥
        String appKey = "平台分配";
        //实例化客户端
        ConfigBean configBean = new ConfigBean();
        OpenApiContext context = new OpenApiContext();
        String request = "{\"requestTimestamp\":\"2022-04-14 17:29:10\",
                    \"merOrderId\":\"327M222041472448972539133\",
                    \"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\":\"false\",
                    \"tradeType\":\"APP\",
                    \"merchantUserId\":\"898310148160568\",
                    \"mobile\":\"131****3453\",
                    \"limitCreditCard\":\"false\",
                    \"installmentNumber\":\"3\",
                    \"enablePayChnl\":\"moneyFund\",
                    \"retCommParams\":\"{\"foodOrderType\":\"pre_order\"}\",
                    \"thirdPartyInstalSubsFlag\":\"true\",
                    \"supportBank\":\"CCB\",
                    \"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/applepay/order";
        $data = json_encode(array("requestTimestamp"=>"2022-04-14 17=>29=>10",
                    "merOrderId"=>"327M222041472448972539133",
                    "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"=>"false",
                    "tradeType"=>"APP",
                    "merchantUserId"=>"898310148160568",
                    "mobile"=>"131****3453",
                    "limitCreditCard"=>"false",
                    "installmentNumber"=>"3",
                    "enablePayChnl"=>"moneyFund",
                    "retCommParams"=>"{"foodOrderType"=>"pre_order"}",
                    "thirdPartyInstalSubsFlag"=>"true",
                    "supportBank"=>"CCB",
                    "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/applepay/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\":\"327M222041472448972539133\",
                    \"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\":\"false\",
                    \"tradeType\":\"APP\",
                    \"merchantUserId\":\"898310148160568\",
                    \"mobile\":\"131****3453\",
                    \"limitCreditCard\":\"false\",
                    \"installmentNumber\":\"3\",
                    \"enablePayChnl\":\"moneyFund\",
                    \"retCommParams\":\"{\"foodOrderType\":\"pre_order\"}\",
                    \"thirdPartyInstalSubsFlag\":\"true\",
                    \"supportBank\":\"CCB\",
                    \"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"))

ApplePay下单

URL

  • 生产环境: POST https://api-mop.chinaums.com/v1/netpay/applepay/order
  • 测试环境: POST https://test-api-open.chinaums.com/v1/netpay/applepay/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 商户订单号 商户自行生成 327M222041472448972539133
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 子订单信息 在传分账标记的情况下,若传子商户号,子商户分账金额必传,即subOrders每个元素的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天后没有主动调用担保完成 且 没有主动调用担保撤销的交易 将会自动按撤销处理。
false
tradeType string 交易类型 微信必传:APP APP
merchantUserId string <=32 商户用户号 898310148160568
mobile string <=20 实名认证手机号 Base64编码 131****3453
limitCreditCard string 是否需要限制信用卡支付 取值:true或false,默认false false
installmentNumber number 花呗分期数 取值:仅支持3、6、12 3
enablePayChnl string 支付宝支付方式 仅支持支付宝,一笔订单中仅允许商户一次上送一个值,可上送的取值范围为:balance(余额),moneyFund(余额宝),pcredit(花呗),pcreditpayInstallment(花呗分期),creditCard(信用卡),debitCardExpress(借记卡) moneyFund
retCommParams object 返佣字段 目前支持支付宝渠道
   foodOrderType string 扫码点餐字段 pre_order pre_order
thirdPartyInstalSubsFlag boolean 是否开启第三方分期交易贴息 true为本笔交易启用第三方贴息,false或者不传为本笔交易不启用第三方贴息。目前只针对花呗分期交易。 true
supportBank string 支持的银行 仅支持云闪付支付支持直接拉起特定银行APP,目前支持:
CCB(中国建设银行)、
CNCB(中信银行手机银行)、
CEB(光大银行手机银行)、
PAB(平安口袋银行)。
CCB
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-04-14 17:29:10",
  "mid":"898340149000005",
  "tid":"00000001",
  "msgId":"0DUNOje1Bwtue6XinEs7DWhKS2NmUCVg",
  "srcReserve":"C20220119000001",
  "merName":"测试商户",
  "merOrderId":"327M202204141724489725391",
  "seqId":"34875658659N",
  "settleRefId":"34875658659N",
  "status":"WAIT_BUYER_PAY",
  "totalAmount":"200",
  "targetOrderId":"802023062815082363",
  "targetSys":"APPLEPAY",
  "targetStatus":"",
  "appPayRequest":
  {

  },
  "prepayId":"ori=13DA002023071900000000003327",
  "targetMid":"898310148160568",
  "yxlmAmount":"100"
}

响应参数

名称 类型 必填 最大长度 描述 示例值
errCode string <=64 错误代码
平台错误码
业务错误码
SUCCESS
errMsg string <=255 错误说明
responseTimestamp string 报文响应时间 格式:yyyy-MM-dd HH:mm:ss 2022-04-14 17:29:10
mid string 商户号 898340149000005
tid string 终端号 00000001
msgId string <=64 消息ID 0DUNOje1Bwtue6XinEs7DWhKS2NmUCVg
srcReserve string <=255 请求系统预留字段 C20220119000001
merName string 商户名称 测试商户
merOrderId string 商户订单号 327M202204141724489725391
seqId string 平台流水号 34875658659N
settleRefId string 清分ID 如果来源方传了bankRefId就等于bankRefId,否则等于seqId 34875658659N
status string 交易状态 详见取值说明 WAIT_BUYER_PAY
totalAmount number 支付总金额 单位:分 200
targetOrderId string 第三方订单号 802023062815082363
targetSys string 目标平台代码 APPLEPAY
targetStatus string 目标平台状态
appPayRequest object APP支付用的请求报文,带有签名信息
prepayId string <=64 支付ID,用于APP支付和公众号支付 ori=13DA002023071900000000003327
targetMid string 支付渠道商户号 各渠道情况不同,酌情转换。 898310148160568
yxlmAmount number 营销联盟优惠金额 单位:分 100

错误码