视频一区二区三区自拍_千金肉奴隷1985未删减版在线观看_国产成人黄色视频在线播放_少女免费播放片高清在线观看_国产精品v欧美精品v

商戶進(jìn)件
特約商戶進(jìn)件
基礎(chǔ)支付
JSAPI支付
APP支付
H5支付
Native支付
小程序支付
合單支付
付款碼支付
經(jīng)營(yíng)能力
支付即服務(wù)
點(diǎn)金計(jì)劃
行業(yè)方案
平臺(tái)收付通
智慧商圈
微信支付分停車服務(wù)
電子發(fā)票
營(yíng)銷工具
代金券
商家券
委托營(yíng)銷
支付有禮
小程序發(fā)券插件
H5發(fā)券
圖片上傳(營(yíng)銷專用)
現(xiàn)金紅包
資金應(yīng)用
分賬
連鎖品牌分賬
風(fēng)險(xiǎn)合規(guī)
商戶開戶意愿確認(rèn)
消費(fèi)者投訴2.0
商戶平臺(tái)處置通知
其他能力
圖片上傳
視頻上傳
微信支付平臺(tái)證書

商戶開戶意愿確認(rèn)開發(fā)指引

1. 接口規(guī)則

為了在保證支付安全的前提下,帶給商戶簡(jiǎn)單、一致且易用的開發(fā)體驗(yàn),我們推出了全新的微信支付APIv3接口。該版本API的具體規(guī)則請(qǐng)參考“APIv3接口規(guī)則

2. 開發(fā)準(zhǔn)備

2.1. 搭建和配置開發(fā)環(huán)境

為了幫助開發(fā)者調(diào)用開放接口,我們提供了JAVA、PHP、GO三種語(yǔ)言版本的開發(fā)庫(kù),封裝了簽名生成、簽名驗(yàn)證、敏感信息加/解密、媒體文件上傳等基礎(chǔ)功能(更多語(yǔ)言版本的開發(fā)庫(kù)將在近期陸續(xù)提供

測(cè)試步驟

1、根據(jù)自身開發(fā)語(yǔ)言,選擇對(duì)應(yīng)的開發(fā)庫(kù)并構(gòu)建項(xiàng)目,具體配置請(qǐng)參考下面鏈接的詳細(xì)說(shuō)明:

    ? wechatpay-java(推薦)wechatpay-apache-httpclient,適用于Java開發(fā)者。

    ? wechatpay-php(推薦)、wechatpay-guzzle-middleware,適用于PHP開發(fā)者

    注:當(dāng)前開發(fā)指引接口PHP示例代碼采用wechatpay-guzzle-middleware版本

    ? wechatpay-go,適用于Go開發(fā)者

更多資源可前往微信支付開發(fā)者社區(qū)搜索查看

2、創(chuàng)建加載商戶私鑰、加載平臺(tái)證書、初始化httpClient的通用方法


@Before
public void setup() throws IOException {
    // 加載商戶私鑰(privateKey:私鑰字符串)
    PrivateKey merchantPrivateKey = PemUtil
            .loadPrivateKey(new ByteArrayInputStream(privateKey.getBytes("utf-8")));
 
    // 加載平臺(tái)證書(mchId:商戶號(hào),mchSerialNo:商戶證書序列號(hào),apiV3Key:V3密鑰)
    AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier(
            new WechatPay2Credentials(mchId, new PrivateKeySigner(mchSerialNo, merchantPrivateKey)),apiV3Key.getBytes("utf-8"));
 
    // 初始化httpClient
    httpClient = WechatPayHttpClientBuilder.create()
            .withMerchant(mchId, mchSerialNo, merchantPrivateKey)
            .withValidator(new WechatPay2Validator(verifier)).build();
}
 
@After
public void after() throws IOException {
    httpClient.close();
}

use GuzzleHttp\Exception\RequestException;
use WechatPay\GuzzleMiddleware\WechatPayMiddleware;
use WechatPay\GuzzleMiddleware\Util\PemUtil;
use GuzzleHttp\HandlerStack;
 
// 商戶相關(guān)配置,
$merchantId = '1000100'; // 商戶號(hào)
$merchantSerialNumber = 'XXXXXXXXXX'; // 商戶API證書序列號(hào)
$merchantPrivateKey = PemUtil::loadPrivateKey('./path/to/mch/private/key.pem'); // 商戶私鑰文件路徑
 
// 微信支付平臺(tái)配置
$wechatpayCertificate = PemUtil::loadCertificate('./path/to/wechatpay/cert.pem'); // 微信支付平臺(tái)證書文件路徑
 
// 構(gòu)造一個(gè)WechatPayMiddleware
$wechatpayMiddleware = WechatPayMiddleware::builder()
    ->withMerchant($merchantId, $merchantSerialNumber, $merchantPrivateKey) // 傳入商戶相關(guān)配置
    ->withWechatPay([ $wechatpayCertificate ]) // 可傳入多個(gè)微信支付平臺(tái)證書,參數(shù)類型為array
    ->build();
 
// 將WechatPayMiddleware添加到Guzzle的HandlerStack中
$stack = GuzzleHttp\HandlerStack::create();
$stack->push($wechatpayMiddleware, 'wechatpay');
 
// 創(chuàng)建Guzzle HTTP Client時(shí),將HandlerStack傳入,接下來(lái),正常使用Guzzle發(fā)起API請(qǐng)求,WechatPayMiddleware會(huì)自動(dòng)地處理簽名和驗(yàn)簽
$client = new GuzzleHttp\Client(['handler' => $stack]);

/*
    Package core 微信支付api v3 go http-client 基礎(chǔ)庫(kù),你可以使用它來(lái)創(chuàng)建一個(gè)client,并向微信支付發(fā)送http請(qǐng)求
    只需要你在初始化客戶端的時(shí)候,傳遞credential以及validator
    credential用來(lái)生成http header中的authorization信息
    validator則用來(lái)校驗(yàn)回包是否被篡改
    如果http請(qǐng)求返回的err為nil,一般response.Body 都不為空,你可以嘗試對(duì)其進(jìn)行序列化
    請(qǐng)注意及時(shí)關(guān)閉response.Body
    注意:使用微信支付apiv3 go庫(kù)需要引入相關(guān)的包,該示例代碼必須引入的包名有以下信息

    "context"
    "crypto/x509"
    "fmt"
    "io/ioutil"
    "log"
    "github.com/wechatpay-apiv3/wechatpay-go/core"
    "github.com/wechatpay-apiv3/wechatpay-go/core/option"
    "github.com/wechatpay-apiv3/wechatpay-go/utils"

    */
func SetUp() (opt []option.ClientOption, err error) {
    //商戶號(hào)
    mchID := ""
    //商戶證書序列號(hào)
    mchCertSerialNumber := ""
    //商戶私鑰文件路徑
    privateKeyPath := ""
    //平臺(tái)證書文件路徑
    wechatCertificatePath := ""

    // 加載商戶私鑰
    privateKey, err := utils.LoadPrivateKeyWithPath(privateKeyPath)
    if err != nil {
        log.Printf("load private err:%s", err.Error())
        return nil, err
    }
    // 加載微信支付平臺(tái)證書
    wechatPayCertificate, err := utils.LoadCertificateWithPath(wechatCertificatePath)
    if err != nil {
        log.Printf("load certificate err:%s",err)
        return nil, err
    }
    //設(shè)置header頭中authorization信息
    opts := []option.ClientOption{
        option.WithMerchant(mchID, mchCertSerialNumber, privateKey), // 設(shè)置商戶相關(guān)配置
        option.WithWechatPay([]*x509.Certificate{wechatPayCertificate}), // 設(shè)置微信支付平臺(tái)證書,用于校驗(yàn)回包信息用
    }
    return opts, nil
}

3、基于接口的示例代碼,替換請(qǐng)求參數(shù)后可發(fā)起測(cè)試

說(shuō)明:

? 上面的開發(fā)庫(kù)為微信支付官方開發(fā)庫(kù),其它沒有審核或者控制下的第三方工具和庫(kù),微信支付不保證它們的安全性和可靠性

通過(guò)包管理工具引入SDK后,可根據(jù)下面每個(gè)接口的示例代碼替換相關(guān)參數(shù)后進(jìn)行快速測(cè)試

? 開發(fā)者如果想詳細(xì)了解簽名生成、簽名驗(yàn)證、敏感信息加/解密、媒體文件上傳等常用方法的具體代碼實(shí)現(xiàn),可閱讀下面的詳細(xì)說(shuō)明:

    1.簽名生成

    2.簽名驗(yàn)證

    3.敏感信息加解密

    4.merchantPrivateKey(私鑰)

    5.wechatpayCertificates(平臺(tái)證書)

    6.APIV3Key(V3 key)

? 如想更詳細(xì)的了解我們的接口規(guī)則,可查看我們的接口規(guī)則指引文檔

3. 快速接入

3.1. 業(yè)務(wù)流程圖

業(yè)務(wù)流程時(shí)序圖:


申請(qǐng)單狀態(tài)變化如下:


重點(diǎn)步驟說(shuō)明:

步驟1 獲取微信支付商戶號(hào):渠道商使用銀行或者支付機(jī)構(gòu)提供的API或者后臺(tái)系統(tǒng)錄入商家門店信息,獲取商家每個(gè)門店在微信支付側(cè)的商戶號(hào)(上送給微信支付的“商戶名稱”字段必須與營(yíng)業(yè)執(zhí)照上商戶名稱一致,具體規(guī)則?點(diǎn)擊查看?)。

步驟2 查詢微信支付商戶號(hào)授權(quán)狀態(tài):渠道商使用《獲取商戶號(hào)開戶意愿確認(rèn)狀態(tài)接口》查詢微信支付商戶號(hào)是否完成開戶意愿確認(rèn)。

步驟5 提交商家資料給微信支付:渠道商根據(jù)商家類型(企業(yè)、個(gè)體戶、小微、事業(yè)單位、其他組織等)準(zhǔn)備好相關(guān)的商家資料,使用微信支付接口《提交開戶意愿確認(rèn)申請(qǐng)單》獲取微信支付申請(qǐng)單編號(hào)。

步驟8 查詢申請(qǐng)單審核結(jié)果:渠道商提交商家資料后,建議每隔五分鐘調(diào)用《查詢申請(qǐng)單審核結(jié)果接口》查詢申請(qǐng)單審核結(jié)果。

申請(qǐng)單正常情況下的狀態(tài)轉(zhuǎn)換如下:

1、提交后申請(qǐng)單狀態(tài)為“審核中”,微信支付后臺(tái)會(huì)進(jìn)行審核,審核通過(guò)后申請(qǐng)單狀態(tài)變成“待聯(lián)系人確認(rèn)”,同時(shí)接口會(huì)提供“申請(qǐng)單小程序碼” (小程序碼的圖片)。

2、聯(lián)系人掃“申請(qǐng)單小程序碼”后確認(rèn)資料無(wú)誤后,申請(qǐng)單狀態(tài)變成“待賬戶驗(yàn)證”。

3、聯(lián)系人將“法人確認(rèn)二維碼”在微信上發(fā)給法人確認(rèn)后(或打款驗(yàn)證),申請(qǐng)單狀態(tài)變成“審核通過(guò)”。

  •     ● 當(dāng)審核結(jié)果為“審核駁回”時(shí),請(qǐng)根據(jù)駁回原因重新提交商家資料,重新提交前請(qǐng)使用《撤銷原申請(qǐng)單》,再次提交新的商家資料。
  •     ● 當(dāng)審核結(jié)果為“待聯(lián)系人確認(rèn)”或“待賬戶驗(yàn)證”或“審核通過(guò)”時(shí),接口會(huì)同時(shí)給出“申請(qǐng)單小程序碼”。

3.2. API接入(含示例代碼)

文檔展示了如何使用微信支付服務(wù)端 SDK 快速接入商戶開戶意愿確認(rèn)產(chǎn)品,完成與微信支付對(duì)接的部分。

注意

  • 文檔中的代碼示例是用來(lái)闡述 API 基本使用方法,代碼中的示例參數(shù)需替換成商戶自己賬號(hào)及請(qǐng)求參數(shù)才能跑通
  • 以下接入步驟僅提供參考,請(qǐng)商戶結(jié)合自身業(yè)務(wù)需求進(jìn)行評(píng)估、修改。
3.2.1. 【服務(wù)端】提交申請(qǐng)單

步驟說(shuō)明:服務(wù)商收集商戶資料后,調(diào)用提交申請(qǐng)單接口,提交創(chuàng)建入駐申請(qǐng)單。

示例代碼


public void Applyment() throws Exception {
  // 加載商戶私鑰(privateKey:私鑰字符串)
  PrivateKey merchantPrivateKey = PemUtil
          .loadPrivateKey(new ByteArrayInputStream(privateKey.getBytes("utf-8")));

  // 加載平臺(tái)證書(mchId:商戶號(hào),mchSerialNo:商戶證書序列號(hào),apiV3Key:V3秘鑰)
  AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier(
          new WechatPay2Credentials(mchId, new PrivateKeySigner(mchSerialNo, merchantPrivateKey)),apiV3Key.getBytes("utf-8"));

  CloseableHttpClient httpClient = HttpClients.createDefault();
  // 初始化httpClient
  httpClient = WechatPayHttpClientBuilder.create()
          .withMerchant(mchId, mchSerialNo, merchantPrivateKey)
          .withValidator(new WechatPay2Validator(verifier)).build();

  //請(qǐng)求URL
  HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/v3/apply4subject/applyment");
  // 請(qǐng)求body參數(shù)
  String reqdata = "{"
          + "\"business_code\":\"1111111111\","
          + "\"contact_info\": {"
          + "\"name\":\"wRNIsXOvVuTYIhVxZJCD8uJIGmNPGozCe44Ph8rD+QAJEPxw==\","
          + "\"mobile\":\"w+zPKEVNm7IDxPvK55P0OfNd5E5VXoWbRwyyGk37HiB6C/F2lUog==\","
          + "\"id_card_number\":\"rjbq82xBwMixDGA5A4x6/hqZRAYmaeM+yyjn9BU8qUBZga+mKqQ==\""
          + "},"
          + "\"subject_info\": {"
          + "\"subject_type\":\"SUBJECT_TYPE_ENTERPRISE\","
          + "\"business_licence_info\": {"
          + "\"licence_number\":\"914201123033363296\","
          + "\"licence_copy\":\"0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo\","
          + "\"merchant_name\":\"李四網(wǎng)絡(luò)有限公司\","
          + "\"legal_person\":\"李四\","
          + "\"company_address\":\"廣東省深圳市南山區(qū)xx路xx號(hào)\","
          + "\"licence_valid_date\":\"["1970-01-01","forever"]\""
          + "},"
          + "\"certificate_info\": {"
          + "\"cert_type\":\"CERTIFICATE_TYPE_2388\","
          + "\"cert_number\":\"111111111111\","
          + "\"cert_copy\":\"0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo\","
          + "\"merchant_name\":\"xx公益團(tuán)體\","
          + "\"legal_person\":\"李四\","
          + "\"company_address\":\"廣東省深圳市南山區(qū)xx路xx號(hào)\","
          + "\"cert_valid_date\":\"["1970-01-01","forever"]\""
          + "},"
          + "\"company_prove_copy\":\"0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo\","
          + "\"assist_prove_info\": {"
          + "\"micro_biz_type\":\"MICRO_TYPE_STORE\","
          + "\"store_name\":\"大郎燒餅\","
          + "\"store_address_code\":\"440305\","
          + "\"store_address\":\"廣東省深圳市南山區(qū)xx大廈x層xxxx室\","
          + "\"store_header_copy\":\"0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo\","
          + "\"store_indoor_copy\":\"0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo\""
          + "}"
          + "},"
          + "\"identification_info\": {"
          + "\"identification_type\":\"IDENTIFICATION_TYPE_IDCARD\","
          + "\"identification_name\":\"MZnwEx6zotwIz6ctW2/iQL5z94odwP9sKiFRL8Aii3L4U74RPCPztcJOScaXsaGs82HJNU3K+46ndk7prENiPDw==\","
          + "\"identification_number\":\"ZTnn5dKGCvP4csw4XTLug/+VLB+4R6nxSPQwqSpmPVZtXmye+/3s9O+y32w==\","
          + "\"identification_valid_date\":\"["1970-01-01","forever"]\","
          + "\"identification_front_copy\":\"0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo\","
          + "\"identification_back_copy\":\"0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo\""
          + "},"
          + "\"addition_info\": {"
          + "\"confirm_mchid_list\": ["
          + "\"20001113\","
          + "\"20001112\""
          + "]"
          + "}"
          + "}";
  StringEntity entity = new StringEntity(reqdata,"utf-8");
  entity.setContentType("application/json");
  httpPost.setEntity(entity);
  httpPost.setHeader("Accept", "application/json");

  //完成簽名并執(zhí)行請(qǐng)求
  CloseableHttpResponse response = httpClient.execute(httpPost);

  try {
      int statusCode = response.getStatusLine().getStatusCode();
      if (statusCode == 200) { //處理成功
          System.out.println("success,return body = " + EntityUtils.toString(response.getEntity()));
      } else if (statusCode == 204) { //處理成功,無(wú)返回Body
          System.out.println("success");
      } else {
          System.out.println("failed,resp code = " + statusCode+ ",return body = " + EntityUtils.toString(response.getEntity()));
          throw new IOException("request failed");
      }
  } finally {
      response.close();
  }
}


try {
    $resp = $client->request(
        'POST',
        'https://api.mch.weixin.qq.com/v3/apply4subject/applyment', //請(qǐng)求URL
        [
            // JSON請(qǐng)求體
            'json' => [
                "business_code" => "1111111111", 
                "contact_info" => [
                    "name" => "wRNIsXOvVuTYIhVxZJCD8uJIGmNPGozCe44Ph8rD+QAJEPxw==", 
                    "mobile" => "w+zPKEVNm7IDxPvK55P0OfNd5E5VXoWbRwyyGk37HiB6C/F2lUog==", 
                    "id_card_number" => "rjbq82xBwMixDGA5A4x6/hqZRAYmaeM+yyjn9BU8qUBZga+mKqQ==", 
                ],
                "subject_info" => [
                    "subject_type" => "SUBJECT_TYPE_ENTERPRISE", 
                    "business_licence_info" => [
                        "licence_number" => "914201123033363296", 
                        "licence_copy" => "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo", 
                        "merchant_name" => "李四網(wǎng)絡(luò)有限公司", 
                        "legal_person" => "李四", 
                        "company_address" => "廣東省深圳市南山區(qū)xx路xx號(hào)", 
                        "licence_valid_date" => "["1970-01-01","forever"]", 
                    ],
                    "certificate_info" => [
                        "cert_type" => "CERTIFICATE_TYPE_2388", 
                        "cert_number" => "111111111111", 
                        "cert_copy" => "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo", 
                        "merchant_name" => "xx公益團(tuán)體", 
                        "legal_person" => "李四", 
                        "company_address" => "廣東省深圳市南山區(qū)xx路xx號(hào)", 
                        "cert_valid_date" => "["1970-01-01","forever"]", 
                    ],
                    "company_prove_copy" => "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo", 
                    "assist_prove_info" => [
                        "micro_biz_type" => "MICRO_TYPE_STORE", 
                        "store_name" => "大郎燒餅", 
                        "store_address_code" => "440305", 
                        "store_address" => "廣東省深圳市南山區(qū)xx大廈x層xxxx室", 
                        "store_header_copy" => "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo", 
                        "store_indoor_copy" => "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo", 
                    ],
                ],
                "identification_info" => [
                    "identification_type" => "IDENTIFICATION_TYPE_IDCARD", 
                    "identification_name" => "MZnwEx6zotwIz6ctW2/iQL5z94odwP9sKiFRL8Aii3L4U74RPCPztcJOScaXsaGs82HJNU3K+46ndk7prENiPDw==", 
                    "identification_number" => "ZTnn5dKGCvP4csw4XTLug/+VLB+4R6nxSPQwqSpmPVZtXmye+/3s9O+y32w==", 
                    "identification_valid_date" => "["1970-01-01","forever"]", 
                    "identification_front_copy" => "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo", 
                    "identification_back_copy" => "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo", 
                ],
                "addition_info" => [
                    "confirm_mchid_list" => [
                        "0" => "20001113", 
                        "1" => "20001112", 
                    ],
                ]
            ],
            'headers' => [ 'Accept' => 'application/json' ]
        ]
    );
    $statusCode = $resp->getStatusCode();
    if ($statusCode == 200) { //處理成功
        echo "success,return body = " . $resp->getBody()->getContents()."\n";
    } else if ($statusCode == 204) { //處理成功,無(wú)返回Body
        echo "success";
    }
} catch (RequestException $e) {
    // 進(jìn)行錯(cuò)誤處理
    echo $e->getMessage()."\n";
    if ($e->hasResponse()) {
        echo "failed,resp code = " . $e->getResponse()->getStatusCode() . " return body = " . $e->getResponse()->getBody() . "\n";
    }
    return;
}
     

 //此處請(qǐng)求頭需增加序列號(hào)
func Applyment() {
       // 初始化客戶端
    ctx := context.TODO()
    opts, err := SetUp()
    if err != nil {
        return
    }
    client, err := core.NewClient(ctx, opts...,)
    if err != nil{
        log.Printf("init client err:%s",err)
        return
    }
//設(shè)置請(qǐng)求地址
  URL := "https://api.mch.weixin.qq.com/v3/apply4subject/applyment"
  //設(shè)置請(qǐng)求信息,此處也可以使用結(jié)構(gòu)體來(lái)進(jìn)行請(qǐng)求
  mapInfo := map[string]interface{}{
    "business_code": "1111111111",
    "contact_info": map[string]interface{}{
      "name": "wRNIsXOvVuTYIhVxZJCD8uJIGmNPGozCe44Ph8rD+QAJEPxw==",
      "mobile": "w+zPKEVNm7IDxPvK55P0OfNd5E5VXoWbRwyyGk37HiB6C/F2lUog==",
      "id_card_number": "rjbq82xBwMixDGA5A4x6/hqZRAYmaeM+yyjn9BU8qUBZga+mKqQ==",
    },
    "subject_info": map[string]interface{}{
      "subject_type": "SUBJECT_TYPE_ENTERPRISE",
      "business_licence_info": map[string]interface{}{
        "licence_number": "914201123033363296",
        "licence_copy": "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo",
        "merchant_name": "李四網(wǎng)絡(luò)有限公司",
        "legal_person": "李四",
        "company_address": "廣東省深圳市南山區(qū)xx路xx號(hào)",
        "licence_valid_date": "["1970-01-01","forever"]",
     },
      "certificate_info": map[string]interface{}{
        "cert_type": "CERTIFICATE_TYPE_2388",
        "cert_number": "111111111111",
        "cert_copy": "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo",
        "merchant_name": "xx公益團(tuán)體",
        "legal_person": "李四",
        "company_address": "廣東省深圳市南山區(qū)xx路xx號(hào)",
        "cert_valid_date": "["1970-01-01","forever"]",
     },
      "company_prove_copy": "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo",
      "assist_prove_info": map[string]interface{}{
        "micro_biz_type": "MICRO_TYPE_STORE",
        "store_name": "大郎燒餅",
        "store_address_code": "440305",
        "store_address": "廣東省深圳市南山區(qū)xx大廈x層xxxx室",
        "store_header_copy": "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo",
        "store_indoor_copy": "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo",
     },
    },
    "identification_info": map[string]interface{}{
      "identification_type": "IDENTIFICATION_TYPE_IDCARD",
      "identification_name": "MZnwEx6zotwIz6ctW2/iQL5z94odwP9sKiFRL8Aii3L4U74RPCPztcJOScaXsaGs82HJNU3K+46ndk7prENiPDw==",
      "identification_number": "ZTnn5dKGCvP4csw4XTLug/+VLB+4R6nxSPQwqSpmPVZtXmye+/3s9O+y32w==",
      "identification_valid_date": "["1970-01-01","forever"]",
      "identification_front_copy": "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo",
      "identification_back_copy": "0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo",
    },
    "addition_info": map[string]interface{}{
      "confirm_mchid_list": [...]interface{}{
        "20001113",
        "20001112",
     },
    },
  }

  // 發(fā)起請(qǐng)求
  response, err := client.Post(ctx, URL, mapInfo)
  if err != nil{
    log.Printf("client post err:%s",err)
    return
  }
  // 校驗(yàn)回包內(nèi)容是否有邏輯錯(cuò)誤
  err = core.CheckResponse(response)
  if err != nil{
    log.Printf("check response err:%s",err)
    return
  }
  // 讀取回包信息
  body, err := ioutil.ReadAll(response.Body)
  if err != nil{
    log.Printf("read response body err:%s",err)
    return
  }
  fmt.Println(string(body))
}
    

重要入?yún)⒄f(shuō)明

? business_code:業(yè)務(wù)申請(qǐng)編號(hào),服務(wù)商自定義的唯一編號(hào),每個(gè)編號(hào)對(duì)應(yīng)一個(gè)申請(qǐng)單。

? subject_type:主體類型。枚舉值:

SUBJECT_TYPE_ENTERPRISE:企業(yè)
SUBJECT_TYPE_INSTITUTIONS_CLONED:事業(yè)單位
SUBJECT_TYPE_INDIVIDUAL:個(gè)體工商戶
SUBJECT_TYPE_OTHERS:其他組織
SUBJECT_TYPE_MICRO:小微商戶

? licence_number:營(yíng)業(yè)執(zhí)照注冊(cè)號(hào)。

1、請(qǐng)?zhí)顚憼I(yíng)業(yè)執(zhí)照上的注冊(cè)號(hào)。
2、若主體類型為個(gè)體工商戶或企業(yè),注冊(cè)號(hào)格式須為15位數(shù)字或18位數(shù)字|大寫字母。

? merchant_name:商戶名稱。

1、個(gè)體工商戶,不能以“公司”結(jié)尾。
2、個(gè)體工商戶,若營(yíng)業(yè)執(zhí)照上商戶名稱為空或?yàn)椤盁o(wú)”,請(qǐng)?zhí)顚?個(gè)體戶+經(jīng)營(yíng)者姓名",如“個(gè)體戶張三”。

? legal_person:法人姓名。

1、只能由中文字符、英文字符、可見符號(hào)組成。
2、請(qǐng)?zhí)顚憼I(yíng)業(yè)執(zhí)照的經(jīng)營(yíng)者/法定代表人姓名。

注意

更多參數(shù)、響應(yīng)詳情及錯(cuò)誤碼請(qǐng)參見提交申請(qǐng)單接口文檔

3.2.2. 【服務(wù)端】撤銷申請(qǐng)單

步驟說(shuō)明:服務(wù)商提交申請(qǐng)單后需要修改信息時(shí),或者申請(qǐng)單審核結(jié)果為“已駁回”時(shí)服務(wù)商要修改申請(qǐng)材料時(shí),均需要先調(diào)用撤銷申請(qǐng)單接口。

示例代碼


public void CancelApplyment() throws Exception{
  // 加載商戶私鑰(privateKey:私鑰字符串)
  PrivateKey merchantPrivateKey = PemUtil
          .loadPrivateKey(new ByteArrayInputStream(privateKey.getBytes("utf-8")));

  // 加載平臺(tái)證書(mchId:商戶號(hào),mchSerialNo:商戶證書序列號(hào),apiV3Key:V3秘鑰)
  AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier(
          new WechatPay2Credentials(mchId, new PrivateKeySigner(mchSerialNo, merchantPrivateKey)),apiV3Key.getBytes("utf-8"));

  CloseableHttpClient httpClient = HttpClients.createDefault();
  // 初始化httpClient
  httpClient = WechatPayHttpClientBuilder.create()
          .withMerchant(mchId, mchSerialNo, merchantPrivateKey)
          .withValidator(new WechatPay2Validator(verifier)).build();

  //請(qǐng)求URL
  HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/v3/apply4subject/applyment/20000011111/cancel");
  StringEntity entity = new StringEntity("");
  entity.setContentType("application/json");
  httpPost.setEntity(entity);
  httpPost.setHeader("Accept", "application/json");

  //完成簽名并執(zhí)行請(qǐng)求
  CloseableHttpResponse response = httpClient.execute(httpPost);

  try {
      int statusCode = response.getStatusLine().getStatusCode();
      if (statusCode == 200) { //處理成功
          System.out.println("success,return body = " + EntityUtils.toString(response.getEntity()));
      } else if (statusCode == 204) { //處理成功,無(wú)返回Body
          System.out.println("success");
      } else {
          System.out.println("failed,resp code = " + statusCode+ ",return body = " + EntityUtils.toString(response.getEntity()));
          throw new IOException("request failed");
      }
  } finally {
      response.close();
  }
}

try {
    $resp = $client->request(
        'POST',
        'https://api.mch.weixin.qq.com/v3/apply4subject/applyment/123/cancel', //請(qǐng)求URL
        [
            'headers' => [ 
                'Accept' => 'application/json',
                'Content-Type'=>'application/json'

            ]
        ]
    );
    $statusCode = $resp->getStatusCode();
    if ($statusCode == 200) { //處理成功
        echo "success,return body = " . $resp->getBody()->getContents()."\n";
    } else if ($statusCode == 204) { //處理成功,無(wú)返回Body
        echo "success";
    }
} catch (RequestException $e) {
    // 進(jìn)行錯(cuò)誤處理
    echo $e->getMessage()."\n";
    if ($e->hasResponse()) {
        echo "failed,resp code = " . $e->getResponse()->getStatusCode() . " return body = " . $e->getResponse()->getBody() . "\n";
    }
    return;
}
     

func CancelApplyment() {
       // 初始化客戶端
    ctx := context.TODO()
    opts, err := SetUp()
    if err != nil {
        return
    }
    client, err := core.NewClient(ctx, opts...,)
    if err != nil{
        log.Printf("init client err:%s",err)
        return
    }
 //設(shè)置請(qǐng)求地址
  URL := "https://api.mch.weixin.qq.com/v3/apply4subject/applyment/20000011111/cancel"
  //設(shè)置請(qǐng)求信息,此處也可以使用結(jié)構(gòu)體來(lái)進(jìn)行請(qǐng)求
  mapInfo := map[string]interface{}{}

  // 發(fā)起請(qǐng)求
  response, err := client.Post(ctx, URL, mapInfo)
  if err != nil{
    log.Printf("client post err:%s",err)
    return
  }
  // 校驗(yàn)回包內(nèi)容是否有邏輯錯(cuò)誤
  err = core.CheckResponse(response)
  if err != nil{
    log.Printf("check response err:%s",err)
    return
  }
  // 讀取回包信息
  body, err := ioutil.ReadAll(response.Body)
  if err != nil{
    log.Printf("read response body err:%s",err)
    return
  }
  fmt.Println(string(body))
}
    

重要入?yún)⒄f(shuō)明

? applyment_id:申請(qǐng)單編號(hào),微信支付分配的申請(qǐng)單號(hào),申請(qǐng)單編號(hào)和業(yè)務(wù)申請(qǐng)編號(hào)至少傳一個(gè)。

? business_code:業(yè)務(wù)申請(qǐng)編號(hào)

1、服務(wù)商自定義的唯一編號(hào)。
2、每個(gè)編號(hào)對(duì)應(yīng)一個(gè)申請(qǐng)單。

注意

更多參數(shù)、響應(yīng)詳情及錯(cuò)誤碼請(qǐng)參見撤銷申請(qǐng)單接口文檔

3.2.3. 【服務(wù)端】查詢申請(qǐng)單審核結(jié)果

步驟說(shuō)明:當(dāng)服務(wù)商提交申請(qǐng)單后,需要定期調(diào)用此接口查詢申請(qǐng)單的審核狀態(tài)。

示例代碼


public void QueryApplyment() throws Exception{
  // 加載商戶私鑰(privateKey:私鑰字符串)
  PrivateKey merchantPrivateKey = PemUtil
          .loadPrivateKey(new ByteArrayInputStream(privateKey.getBytes("utf-8")));

  // 加載平臺(tái)證書(mchId:商戶號(hào),mchSerialNo:商戶證書序列號(hào),apiV3Key:V3秘鑰)
  AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier(
          new WechatPay2Credentials(mchId, new PrivateKeySigner(mchSerialNo, merchantPrivateKey)),apiV3Key.getBytes("utf-8"));

  CloseableHttpClient httpClient = HttpClients.createDefault();
  // 初始化httpClient
  httpClient = WechatPayHttpClientBuilder.create()
          .withMerchant(mchId, mchSerialNo, merchantPrivateKey)
          .withValidator(new WechatPay2Validator(verifier)).build();

  //請(qǐng)求URL
  HttpGet httpGet = new HttpGet("https://api.mch.weixin.qq.com/v3/apply4subject/applyment?applyment_id=20000011111");
  httpGet.setHeader("Accept", "application/json");

  //完成簽名并執(zhí)行請(qǐng)求
  CloseableHttpResponse response = httpClient.execute(httpGet);

  try {
      int statusCode = response.getStatusLine().getStatusCode();
      if (statusCode == 200) { //處理成功
          System.out.println("success,return body = " + EntityUtils.toString(response.getEntity()));
      } else if (statusCode == 204) { //處理成功,無(wú)返回Body
          System.out.println("success");
      } else {
          System.out.println("failed,resp code = " + statusCode+ ",return body = " + EntityUtils.toString(response.getEntity()));
          throw new IOException("request failed");
      }
  } finally {
      response.close();
  }
}

try {
    $resp = $client->request(
        'GET',
        'https://api.mch.weixin.qq.com/v3/apply4subject/applyment?applyment_id=20000011111', //請(qǐng)求URL
        [
            'headers' => [ 'Accept' => 'application/json']
        ]
    );
    $statusCode = $resp->getStatusCode();
    if ($statusCode == 200) { //處理成功
        echo "success,return body = " . $resp->getBody()->getContents()."\n";
    } else if ($statusCode == 204) { //處理成功,無(wú)返回Body
        echo "success";
    }
} catch (RequestException $e) {
    // 進(jìn)行錯(cuò)誤處理
    echo $e->getMessage()."\n";
    if ($e->hasResponse()) {
        echo "failed,resp code = " . $e->getResponse()->getStatusCode() . " return body = " . $e->getResponse()->getBody() . "\n";
    }
    return;
}
     

func QueryApplyment() {
       // 初始化客戶端
    ctx := context.TODO()
    opts, err := SetUp()
    if err != nil {
        return
    }
    client, err := core.NewClient(ctx, opts...,)
    if err != nil{
        log.Printf("init client err:%s",err)
        return
    }
//設(shè)置請(qǐng)求地址
URL := "https://api.mch.weixin.qq.com/v3/apply4subject/applyment?applyment_id=20000011111"
  // 發(fā)起請(qǐng)求
  response, err := client.Get(ctx, URL)
  if err != nil{
    log.Printf("client get err:%s",err)
    return
  }
  // 校驗(yàn)回包內(nèi)容是否有邏輯錯(cuò)誤
  err = core.CheckResponse(response)
  if err != nil{
    log.Printf("check response err:%s",err)
    return
  }
  // 讀取回包信息
  body, err := ioutil.ReadAll(response.Body)
  if err != nil{
    log.Printf("read response body err:%s",err)
    return
  }
  fmt.Println(string(body))
} 
}
    

重要入?yún)⒄f(shuō)明

? applyment_id:申請(qǐng)單編號(hào),微信支付分配的申請(qǐng)單號(hào),申請(qǐng)單編號(hào)和業(yè)務(wù)申請(qǐng)編號(hào)至少傳一個(gè)。

? business_code:業(yè)務(wù)申請(qǐng)編號(hào)

1、服務(wù)商自定義的唯一編號(hào)。
2、每個(gè)編號(hào)對(duì)應(yīng)一個(gè)申請(qǐng)單。

注意

更多參數(shù)、響應(yīng)詳情及錯(cuò)誤碼請(qǐng)參見撤銷申請(qǐng)單接口文檔

3.2.4. 【服務(wù)端】獲取商戶開戶意愿確認(rèn)狀態(tài)

步驟說(shuō)明:當(dāng)服務(wù)商需要確認(rèn)微信支付子商戶號(hào)是否完成確認(rèn)時(shí),如果調(diào)用此接口提到“已授權(quán)”狀態(tài),則說(shuō)明該商戶號(hào)已完成開戶意愿確認(rèn)。

示例代碼


public void QueryMerchantsState() throws Exception{
  // 加載商戶私鑰(privateKey:私鑰字符串)
  PrivateKey merchantPrivateKey = PemUtil
          .loadPrivateKey(new ByteArrayInputStream(privateKey.getBytes("utf-8")));

  // 加載平臺(tái)證書(mchId:商戶號(hào),mchSerialNo:商戶證書序列號(hào),apiV3Key:V3秘鑰)
  AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier(
          new WechatPay2Credentials(mchId, new PrivateKeySigner(mchSerialNo, merchantPrivateKey)),apiV3Key.getBytes("utf-8"));

  CloseableHttpClient httpClient = HttpClients.createDefault();
  // 初始化httpClient
  httpClient = WechatPayHttpClientBuilder.create()
          .withMerchant(mchId, mchSerialNo, merchantPrivateKey)
          .withValidator(new WechatPay2Validator(verifier)).build();

  //請(qǐng)求URL
  HttpGet httpGet = new HttpGet("https://api.mch.weixin.qq.com/v3/apply4subject/applyment/merchants/20000011111/state");
  httpGet.setHeader("Accept", "application/json");

  //完成簽名并執(zhí)行請(qǐng)求
  CloseableHttpResponse response = httpClient.execute(httpGet);

  try {
      int statusCode = response.getStatusLine().getStatusCode();
      if (statusCode == 200) { //處理成功
          System.out.println("success,return body = " + EntityUtils.toString(response.getEntity()));
      } else if (statusCode == 204) { //處理成功,無(wú)返回Body
          System.out.println("success");
      } else {
          System.out.println("failed,resp code = " + statusCode+ ",return body = " + EntityUtils.toString(response.getEntity()));
          throw new IOException("request failed");
      }
  } finally {
      response.close();
  }
}

try {
    $resp = $client->request(
        'GET',
        'https://api.mch.weixin.qq.com/v3/apply4subject/applyment/merchants/20000011111/state', //請(qǐng)求URL
        [
            'headers' => [ 'Accept' => 'application/json']
        ]
    );
    $statusCode = $resp->getStatusCode();
    if ($statusCode == 200) { //處理成功
        echo "success,return body = " . $resp->getBody()->getContents()."\n";
    } else if ($statusCode == 204) { //處理成功,無(wú)返回Body
        echo "success";
    }
} catch (RequestException $e) {
    // 進(jìn)行錯(cuò)誤處理
    echo $e->getMessage()."\n";
    if ($e->hasResponse()) {
        echo "failed,resp code = " . $e->getResponse()->getStatusCode() . " return body = " . $e->getResponse()->getBody() . "\n";
    }
    return;
}
     

func QueryMerchantsState() {
       // 初始化客戶端
    ctx := context.TODO()
    opts, err := SetUp()
    if err != nil {
        return
    }
    client, err := core.NewClient(ctx, opts...,)
    if err != nil{
        log.Printf("init client err:%s",err)
        return
    }
//設(shè)置請(qǐng)求地址
URL := "https://api.mch.weixin.qq.com/v3/apply4subject/applyment/merchants/20000011111/state"
  // 發(fā)起請(qǐng)求
  response, err := client.Get(ctx, URL)
  if err != nil{
    log.Printf("client get err:%s",err)
    return
  }
  // 校驗(yàn)回包內(nèi)容是否有邏輯錯(cuò)誤
  err = core.CheckResponse(response)
  if err != nil{
    log.Printf("check response err:%s",err)
    return
  }
  // 讀取回包信息
  body, err := ioutil.ReadAll(response.Body)
  if err != nil{
    log.Printf("read response body err:%s",err)
    return
  }
  fmt.Println(string(body))
}
    

重要入?yún)⒄f(shuō)明

? sub_mchid:特約商戶號(hào),微信支付分配的特約商戶的唯一標(biāo)識(shí)。

注意

更多參數(shù)、響應(yīng)詳情及錯(cuò)誤碼請(qǐng)參見獲取商戶開戶意愿確認(rèn)狀態(tài)接口文檔

4. 常見問題

Q1:商戶開戶意愿調(diào)用“提交申請(qǐng)單”返回:暫未查詢到該營(yíng)業(yè)執(zhí)照注冊(cè)號(hào),請(qǐng)檢查營(yíng)業(yè)執(zhí)照注冊(cè)號(hào)是否填寫正確

A1:請(qǐng)求參數(shù)“營(yíng)業(yè)執(zhí)照注冊(cè)號(hào)(licence_number)”填寫錯(cuò)誤,請(qǐng)?zhí)顚憼I(yíng)業(yè)執(zhí)照上的注冊(cè)號(hào),若主體類型為個(gè)體工商戶或企業(yè),注冊(cè)號(hào)格式須為15位數(shù)字或18位數(shù)字|大寫字母

Q2:商戶開戶意愿調(diào)用“提交申請(qǐng)單”返回:系統(tǒng)繁忙,請(qǐng)稍后重試

A2:請(qǐng)按照以下幾點(diǎn)檢查:

1. 系統(tǒng)異常,請(qǐng)使用相同參數(shù)稍后重新調(diào)用

2. 請(qǐng)求參數(shù)錯(cuò)誤,請(qǐng)確認(rèn)參數(shù)的大小寫、參數(shù)名、格式是否與接口文檔一致

3. 請(qǐng)求頭里面的參數(shù)mchid錯(cuò)誤,也會(huì)報(bào)這個(gè)錯(cuò)誤,請(qǐng)檢查確認(rèn)

Q3:商戶開戶意愿調(diào)用“撤消申請(qǐng)單”返回:查詢申請(qǐng)單不存在,請(qǐng)檢查申請(qǐng)單號(hào)是否正確

A3:請(qǐng)求參數(shù)申請(qǐng)單編號(hào)(applyment_id)填寫錯(cuò)誤或沒有填寫,請(qǐng)?zhí)顚懳⑿胖Ц斗峙涞纳暾?qǐng)單號(hào),申請(qǐng)單編號(hào)和業(yè)務(wù)申請(qǐng)編號(hào)至少傳一個(gè)

Q4:商戶開戶意愿調(diào)用“獲取特約商戶授權(quán)狀態(tài)”返回:Authorization不合法

A4:請(qǐng)按照以下幾點(diǎn)檢查:

1. Authorization頭認(rèn)證類型或簽名信息錯(cuò)誤,請(qǐng)嚴(yán)格按照文檔要求填寫參數(shù)

    a. Authorization頭認(rèn)證類型目前為WECHATPAY2-SHA256-RSA2048

    b. Authorization頭簽名信息包括發(fā)起請(qǐng)求的商戶(渠道商)的商戶號(hào)mchid

        商戶API證書序列號(hào)serial_no,用于聲明所使用的證書
        請(qǐng)求隨機(jī)串nonce_str
        時(shí)間戳timestamp
        簽名值signature

2. Authorization頭參數(shù)存在換行,實(shí)際數(shù)據(jù)應(yīng)在一行

Q5:商戶開戶意愿調(diào)用“提交申請(qǐng)單”返回:商戶未申請(qǐng)過(guò)證書,請(qǐng)到商戶平臺(tái)上申請(qǐng)證書授權(quán)機(jī)構(gòu)頒發(fā)的證書

A5:請(qǐng)按照錯(cuò)誤提示,到商戶平臺(tái)上申請(qǐng)下載API證書并正確使用,請(qǐng)參考以下幾點(diǎn):

Q6:商戶開戶意愿調(diào)用“撤銷申請(qǐng)單”返回:無(wú)法將傳入?yún)?shù)“申請(qǐng)單編號(hào)”轉(zhuǎn)換為uint64類型

A6:請(qǐng)求參數(shù)類型填寫錯(cuò)誤,正確的參數(shù)類型是uint64



技術(shù)咨詢

文檔反饋