银联商务天满服务平台
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/bills/update-qrcode";
        //开发者ID
        String appId = "平台分配";
        //开发者秘钥
        String appKey = "平台分配";
        //实例化客户端
        ConfigBean configBean = new ConfigBean();
        OpenApiContext context = new OpenApiContext();
        String request = "{\"subMchntInfo\":\"\",
                    \"requestTimestamp\":\"2020-02-26 13:36:00\",
                    \"mid\":\"898340149000005\",
                    \"tid\":\"00000001\",
                    \"instMid\":\"QRPAYDEFAULT\",
                    \"qrCodeId\":\"31942002267733902130410550\",
                    \"msgId\":\"800000000010\",
                    \"srcReserve\":\"test\",
                    \"billNo\":\"8888\",
                    \"billDate\":\"2020-02-26\",
                    \"billDesc\":\"updateQRCode\",
                    \"totalAmount\":\"26\",
                    \"goods\":\"[{\"goodsId\":\"001\",\"goodsName\":\"鸡蛋\",\"quantity\":\"10\",\"price\":\"1\",\"goodsCategory\":\"food meterial\",\"body\":\"two eggs\"}]\",
                    \"memberId\":\"20200226001\",
                    \"counterNo\":\"06\",
                    \"expireTime\":\"2022-02-26 13:31:59\",
                    \"notifyUrl\":\"http://www.test.com/notify\",
                    \"returnUrl\":\"http://www.test.com/return\",
                    \"systemId\":\"31942002267733902130410550\",
                    \"secureTransaction\":\"false\",
                    \"walletOption\":\"SINGLE\",
                    \"name\":\"张*三\",
                    \"mobile\":\"131****3453\",
                    \"certType\":\"IDENTITY_CARD\",
                    \"certNo\":\"110101********9008\",
                    \"fixBuyer\":\"false\",
                    \"preauthTransaction\":\"false\",
                    \"installmentNumber\":\"10\",
                    \"retCommParams\":\"{\"foodOrderType\":\"pre_order\",\"brandId\":\"3421234\",\"storeId\":\"2412343\",\"tableNo\":\"341\",\"parkId\":\"\",\"vehicleNo\":\"\"}\",
                    \"attachedData\":\"test\",
                    \"clientIp\":\"1.1.1.1\",
                    \"isEfrcPs\":\"\",
                    \"psPpt\":\"\"}";
        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/bills/update-qrcode";
        $data = json_encode(array("subMchntInfo"=>"",
                    "requestTimestamp"=>"2020-02-26 13=>36=>00",
                    "mid"=>"898340149000005",
                    "tid"=>"00000001",
                    "instMid"=>"QRPAYDEFAULT",
                    "qrCodeId"=>"31942002267733902130410550",
                    "msgId"=>"800000000010",
                    "srcReserve"=>"test",
                    "billNo"=>"8888",
                    "billDate"=>"2020-02-26",
                    "billDesc"=>"updateQRCode",
                    "totalAmount"=>"26",
                    "goods"=>"json_encode(array([{"goodsId"=>"001","goodsName"=>"鸡蛋","quantity"=>"10","price"=>"1","goodsCategory"=>"food meterial","body"=>"two eggs"}]))",
                    "memberId"=>"20200226001",
                    "counterNo"=>"06",
                    "expireTime"=>"2022-02-26 13=>31=>59",
                    "notifyUrl"=>"http=>//www.test.com/notify",
                    "returnUrl"=>"http=>//www.test.com/return",
                    "systemId"=>"31942002267733902130410550",
                    "secureTransaction"=>"false",
                    "walletOption"=>"SINGLE",
                    "name"=>"张*三",
                    "mobile"=>"131****3453",
                    "certType"=>"IDENTITY_CARD",
                    "certNo"=>"110101********9008",
                    "fixBuyer"=>"false",
                    "preauthTransaction"=>"false",
                    "installmentNumber"=>"10",
                    "retCommParams"=>"{"foodOrderType"=>"pre_order","brandId"=>"3421234","storeId"=>"2412343","tableNo"=>"341","parkId"=>"","vehicleNo"=>""}",
                    "attachedData"=>"test",
                    "clientIp"=>"1.1.1.1",
                    "isEfrcPs"=>"",
                    "psPpt"=>""));
        $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/bills/update-qrcode"

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({\"subMchntInfo\":\"\",
                    \"requestTimestamp\":\"2020-02-26 13:36:00\",
                    \"mid\":\"898340149000005\",
                    \"tid\":\"00000001\",
                    \"instMid\":\"QRPAYDEFAULT\",
                    \"qrCodeId\":\"31942002267733902130410550\",
                    \"msgId\":\"800000000010\",
                    \"srcReserve\":\"test\",
                    \"billNo\":\"8888\",
                    \"billDate\":\"2020-02-26\",
                    \"billDesc\":\"updateQRCode\",
                    \"totalAmount\":\"26\",
                    \"goods\":\"[{\"goodsId\":\"001\",\"goodsName\":\"鸡蛋\",\"quantity\":\"10\",\"price\":\"1\",\"goodsCategory\":\"food meterial\",\"body\":\"two eggs\"}]\",
                    \"memberId\":\"20200226001\",
                    \"counterNo\":\"06\",
                    \"expireTime\":\"2022-02-26 13:31:59\",
                    \"notifyUrl\":\"http://www.test.com/notify\",
                    \"returnUrl\":\"http://www.test.com/return\",
                    \"systemId\":\"31942002267733902130410550\",
                    \"secureTransaction\":\"false\",
                    \"walletOption\":\"SINGLE\",
                    \"name\":\"张*三\",
                    \"mobile\":\"131****3453\",
                    \"certType\":\"IDENTITY_CARD\",
                    \"certNo\":\"110101********9008\",
                    \"fixBuyer\":\"false\",
                    \"preauthTransaction\":\"false\",
                    \"installmentNumber\":\"10\",
                    \"retCommParams\":\"{\"foodOrderType\":\"pre_order\",\"brandId\":\"3421234\",\"storeId\":\"2412343\",\"tableNo\":\"341\",\"parkId\":\"\",\"vehicleNo\":\"\"}\",
                    \"attachedData\":\"test\",
                    \"clientIp\":\"1.1.1.1\",
                    \"isEfrcPs\":\"\",
                    \"psPpt\":\"\"})
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/bills/update-qrcode
  • 测试环境: POST https://test-api-open.chinaums.com/v1/netpay/bills/update-qrcode

描述:对于需要批量生成二维码,在使用时再绑定账单信息;或者因为某种原因需要更换二维码中账单信息的场景下,可以使用二维码更新接口来更新二维码。 其中walletOption字段只针对一次性码,上送值包括“SINGLE”与“MULTIPLE”,对固定码和固定金额码无效;对于“SINGLE”两个app同时扫码弹出密码框后,不同app或相同app的不同用户,只有先扫码的可以支付,后扫码的会拒绝。 接口使用限制:* 需保证更新的商户号、业务类型、消息来源与二维码中的原信息一致;* 若原二维码中存在账单号信息,则更新请求中的账单号不能与原账单号相同。如果需要生成实名认证的二维码,微信必传姓名name和证件号certNo,强制校验位fixBuyer=T;支付宝必传姓名name,证件类型certType,证件号certNo,强制校验位fixBuyer=T。注意:微信实名认证暂时只支持身份证,支付宝支持的证件类型包括:身份证IDENTITY_CARD、护照PASSPORT、军官证OFFICER_CARD、士兵证SOLDIER_CARD、户口本HOKOU。敏感信息如姓名、证件号和手机号信息需要base64编码。

ContentType:HTTP(S) + JSON

请求头

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

请求参数

名称 类型 必填 最大长度 描述 示例值
subMchntInfo string 100 二级商户信息 格式参见:{"subMerId":"89812345","subMerName":"我是商户名"},其中subMerId最长20字节,subMerName最长100字节
requestTimestamp string - 报文请求时间 格式yyyy-MM-dd HH:mm:ss 2020-02-26 13:36:00
mid string 15 商户号 898340149000005
tid string 8 终端号 00000001
instMid string - 业务类型 QRPAYDEFAULT QRPAYDEFAULT
qrCodeId string 32 二维码ID 31942002267733902130410550
msgId string 64 消息ID 原样返回 800000000010
srcReserve string 255 请求系统预留字段 test
billNo string 31 账单号 重要 8888
billDate string - 账单日期 格式:yyyy-MM-dd 2020-02-26
billDesc string 255 账单描述 不超过128个汉字 updateQRCode
totalAmount number 1..1000000 支付总金额 重要,单位:分 26
goods array 商品信息
   goodsId string - 商品ID 001
   goodsName string - 商品名称 鸡蛋
   quantity string - 商品数量 10
   price string - 商品单价,单位:分 1
   goodsCategory string - 商品分类 food meterial
   body string - 商品说明 two eggs
memberId string 32 会员号 支付通知里原样返回 20200226001
counterNo string 32 桌号、柜台号、房间号 支付通知里原样返回 06
expireTime string - 账单过期时间,格式yyyy-MM-dd HH:mm:ss 一次性二维码的默认过期时间为30分钟,最长为90天,固定码默认值是10年 (获取的二维码若显示在自助机上等类似业务,该字段为必传) 2022-02-26 13:31:59
notifyUrl string - 支付结果通知地址 接受支付通知的商户服务url http://www.test.com/notify
returnUrl string - 网页跳转地址 http://www.test.com/return
systemId string 32 系统ID 31942002267733902130410550
secureTransaction string - 担保交易标识 取值:true或false,默认false false
walletOption string - 钱包选项 说明:1.单一钱包支付传SINGLE(支付过程中不能切换钱包), 多钱包支付传MULTIPLE SINGLE
name string 32 实名认证姓名 Base64编码 张*三
mobile string 20 实名认证手机号 Base64编码 131****3453
certType string - 实名认证证件类型 IDENTITY_CARD
certNo string 32 实名认证证件号 Base64编码 110101****9008
fixBuyer string 32 是否需要实名认证 需要实名认证时置为T false
preauthTransaction string - 预授权交易标识 取值:true或false,默认false false
installmentNumber number 3612 花呗分期数 仅支持支付宝 10
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 品牌标识 3421234
   storeId string 32 门店标识 2412343
   tableNo string 32 桌号 341
   parkId string 32 停车场ID,用于支付宝停车场活动
   vehicleNo string 32 车牌号,用于支付宝停车场活动
attachedData string 255 商户附加数据 test
clientIp string - 客户端IP 用户客户端的ip地址 1.1.1.1
isEfrcPs boolean - 是否强制输入附言
psPpt string 60 附言提示语

响应示例

{
  "errCode":"SUCCESS",
  "errMsg":"更新二维码成功",
  "responseTimeStamp":"2020-02-26 13:44:23",
  "billQRCode":"https://qr-test2.chinaums.com/bills/qrCode.do?id=31942002267733902130410550",
  "systemId":"34123443",
  "msgId":"800000000010",
  "srcReserve":"test",
  "mid":"898340149000005",
  "tid":"00000001",
  "instMid":"QRPAYDEFAULT",
  "billNo":"31942002267733902130410550",
  "billDate":"2020-02-26"
}

响应参数

名称 类型 必填 最大长度 描述 示例值
errCode string - 错误代码
平台错误码
业务错误码
SUCCESS
errMsg string - 错误说明 更新二维码成功
responseTimeStamp string - 报文应答时间 格式:yyyy-MM-dd HH:mm:ss 2020-02-26 13:44:23
billQRCode string - 账单二维码 二维码URL https://qr-test2.chinaums.com/bills/qrCode.do?id=31942002267733902130410550
systemId string - 系统ID,原样返回 34123443
msgId string 64 消息ID,原样返回 800000000010
srcReserve string 255 请求系统预留字段 test
mid string - 商户号,原样返回 898340149000005
tid string - 终端号,原样返回 00000001
instMid string - 业务类型,原样返回 QRPAYDEFAULT QRPAYDEFAULT
billNo string - 账单号,原样返回 31942002267733902130410550
billDate string - 账单日期,原样返回 2020-02-26

错误码