视频一区二区三区自拍_千金肉奴隷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ī)
商戶開(kāi)戶意愿確認(rèn)
消費(fèi)者投訴2.0
商戶平臺(tái)處置通知
其他能力
圖片上傳
視頻上傳
微信支付平臺(tái)證書(shū)

支付即服務(wù)開(kāi)發(fā)指引

1. 接口規(guī)則

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

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

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

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

測(cè)試步驟

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

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

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

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

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

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

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


@Before
public void setup() throws IOException {
    // 加載商戶私鑰(privateKey:私鑰字符串)
    PrivateKey merchantPrivateKey = PemUtil
            .loadPrivateKey(new ByteArrayInputStream(privateKey.getBytes("utf-8")));
 
    // 加載平臺(tái)證書(shū)(mchId:商戶號(hào),mchSerialNo:商戶證書(shū)序列號(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證書(shū)序列號(hào)
$merchantPrivateKey = PemUtil::loadPrivateKey('./path/to/mch/private/key.pem'); // 商戶私鑰文件路徑
 
// 微信支付平臺(tái)配置
$wechatpayCertificate = PemUtil::loadCertificate('./path/to/wechatpay/cert.pem'); // 微信支付平臺(tái)證書(shū)文件路徑
 
// 構(gòu)造一個(gè)WechatPayMiddleware
$wechatpayMiddleware = WechatPayMiddleware::builder()
    ->withMerchant($merchantId, $merchantSerialNumber, $merchantPrivateKey) // 傳入商戶相關(guān)配置
    ->withWechatPay([ $wechatpayCertificate ]) // 可傳入多個(gè)微信支付平臺(tái)證書(shū),參數(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 := ""
    //商戶證書(shū)序列號(hào)
    mchCertSerialNumber := ""
    //商戶私鑰文件路徑
    privateKeyPath := ""
    //平臺(tái)證書(shū)文件路徑
    wechatCertificatePath := ""

    // 加載商戶私鑰
    privateKey, err := utils.LoadPrivateKeyWithPath(privateKeyPath)
    if err != nil {
        log.Printf("load private err:%s", err.Error())
        return nil, err
    }
    // 加載微信支付平臺(tái)證書(shū)
    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)證書(shū),用于校驗(yàn)回包信息用
    }
    return opts, nil
}

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

說(shuō)明:

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

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

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

    1.簽名生成

    2.簽名驗(yàn)證

    3.敏感信息加解密

    4.merchantPrivateKey(私鑰)

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

    6.APIV3Key(V3 key)

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

2.2. 業(yè)務(wù)開(kāi)發(fā)配置

1、登錄【微信支付服務(wù)商平臺(tái)】后,通過(guò)路徑【產(chǎn)品中心—>我的產(chǎn)品—>支付即服務(wù)—>產(chǎn)品設(shè)置】,即可開(kāi)通支付即服務(wù),開(kāi)通后完成產(chǎn)品設(shè)置。


2、【產(chǎn)品設(shè)置】頁(yè)面如下圖所示,具體內(nèi)容包括上傳商家logo、選擇服務(wù)人員名稱及選擇名片功能模塊。

3. 快速接入

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


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

步驟6 使用企業(yè)微信的商戶,通過(guò)《服務(wù)人員注冊(cè)API》接口傳入服務(wù)人員信息進(jìn)行注冊(cè),微信支付返回服務(wù)人員ID給到商戶,商戶需將服務(wù)人員注冊(cè)信息和對(duì)應(yīng)的服務(wù)人員ID進(jìn)行妥善保存。

步驟11 商戶在下單時(shí)生成商戶訂單號(hào),接著調(diào)用《服務(wù)人員分配API》傳入“商戶訂單號(hào)+服務(wù)人員ID”,隨后按照原有流程和支付接口完成支付即可。


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

文檔展示了如何使用微信支付服務(wù)端 SDK 快速接入支付即服務(wù)產(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ù)端】服務(wù)人員注冊(cè)

步驟說(shuō)明:服務(wù)人員注冊(cè)接口用于商戶開(kāi)發(fā)者為商戶注冊(cè)服務(wù)人員使用。

注意

  • 調(diào)用接口前商家需完成支付即服務(wù)產(chǎn)品的開(kāi)通和設(shè)置。若服務(wù)商為特約商戶調(diào)用接口,需在特約商戶開(kāi)通并完成產(chǎn)品設(shè)置后,與特約商戶建立產(chǎn)品授權(quán)關(guān)系。

示例代碼


public void RegSmartGuide() throws Exception{
    //請(qǐng)求URL
    HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/v3/smartguide/guides");
    // 請(qǐng)求body參數(shù)
    String reqdata = "{"
	  + "\"sub_mchid\":\"1234567890\","
            + "\"store_id\":1234,"
            + "\"corpid\":\"1234567890\","
            + "\"name\":\"pVd1HJ6v/69bDnuC4EL5Kz4jBHLiCa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==\","
            + "\"mobile\":\"pVd1HJ6v/69bDnuC4EL5Kz4jBHLiCa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==\","
            + "\"qr_code\":\"https://open.work.weixin.qq.com/wwopen/userQRCode?vcode=xxx\","
            + "\"avatar\":\"http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0\","
            + "\"group_qrcode\":\"http://p.qpic.cn/wwhead/nMl9ssowtibVGyrmvBiaibzDtp/0\","
            + "\"userid\":\"robert\""
            + "}";
    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/smartguide/guides', //請(qǐng)求URL
        [
            // JSON請(qǐng)求體
            'json' => [
                "store_id" => 1234, 
                "sub_mchid" => "1234567890", 
                "corpid" => "1234567890", 
                "name" => "pVd1HJ6v/69bDnuC4EL5Kz4jBHLiCa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==", 
                "mobile" => "pVd1HJ6v/69bDnuC4EL5Kz4jBHLiCa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==", 
                "qr_code" => "https://open.work.weixin.qq.com/wwopen/userQRCode?vcode=xxx", 
                "avatar" => "http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0", 
                "group_qrcode" => "http://p.qpic.cn/wwhead/nMl9ssowtibVGyrmvBiaibzDtp/0", 
                "userid" => "robert",
            ],
            '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 RegSmartGuide() {
       // 初始化客戶端
    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/smartguide/guides"
  //設(shè)置請(qǐng)求信息,此處也可以使用結(jié)構(gòu)體來(lái)進(jìn)行請(qǐng)求
  mapInfo := map[string]interface{}{
    "store_id": 1234,
    "corpid": "1234567890",
    "name": "pVd1HJ6v/69bDnuC4EL5Kz4jBHLiCa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==",
    "mobile": "pVd1HJ6v/69bDnuC4EL5Kz4jBHLiCa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==",
    "qr_code": "https://open.work.weixin.qq.com/wwopen/userQRCode?vcode=xxx",
    "sub_mchid": "1234567890",
    "avatar": "http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0",
    "group_qrcode": "http://p.qpic.cn/wwhead/nMl9ssowtibVGyrmvBiaibzDtp/0",
    "userid": "robert",
  }

  // 發(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ō)明

? store_id:門店在微信支付商戶平臺(tái)的唯一標(biāo)識(shí)(查找路徑:登錄商戶平臺(tái)—>營(yíng)銷中心—>門店管理,若無(wú)門店則需先創(chuàng)建門店)

? name:?jiǎn)T工在商戶企業(yè)微信通訊錄上的姓名,需使用微信支付平臺(tái)公鑰加密該字段需進(jìn)行加密處理,加密方法詳見(jiàn)敏感信息加密說(shuō)明特殊規(guī)則:加密前字段長(zhǎng)度限制為64個(gè)字節(jié)

更多參數(shù)、響應(yīng)詳情及錯(cuò)誤碼請(qǐng)參見(jiàn)服務(wù)人員注冊(cè)API接口文檔

3.2.2.【服務(wù)端】服務(wù)人員分配

步驟說(shuō)明:服務(wù)人員分配接口用于商戶開(kāi)發(fā)者在顧客下單后為顧客分配服務(wù)人員使用。

注意

  • 調(diào)用服務(wù)人員分配接口需在完成支付之前,若分配服務(wù)人員晚于支付完成,則將無(wú)法在支付憑證上出現(xiàn)服務(wù)人員名片入口。
  • 示例代碼

    
    public void AssignGuide() throws Exception{
        //請(qǐng)求URL
        HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/v3/smartguide/guides/LLA3WJ6DSZUfiaZDS79FH5Wm5m4X69TBic/assign");
        // 請(qǐng)求body參數(shù)
        String reqdata = "{"
                + "\"out_trade_no\":\"20150806125346\""
    	  + "\"sub_mchid\":\"1234567890\""
                + "}";
        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/smartguide/guides/LLA3WJ6DSZUfiaZDS79FH5Wm5m4X69TBic/assign', //請(qǐng)求URL
            [
                // JSON請(qǐng)求體
                'json' => [
                    "out_trade_no" => "20150806125346",
                    "sub_mchid" => "1234567890",
                ],
                '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 AssignGuide() {
           // 初始化客戶端
        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)求地址
      //設(shè)置請(qǐng)求地址
      URL := "https://api.mch.weixin.qq.com/v3/smartguide/guides/LLA3WJ6DSZUfiaZDS79FH5Wm5m4X69TBic/assign"
      //設(shè)置請(qǐng)求信息,此處也可以使用結(jié)構(gòu)體來(lái)進(jìn)行請(qǐng)求
      mapInfo := map[string]interface{}{
        "out_trade_no": "20150806125346",
        "sub_mchid": "1234567890",
      }
    
      // 發(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ō)明

    ? out_trade_no:商戶系統(tǒng)內(nèi)部訂單號(hào),要求32個(gè)字符內(nèi),僅支持使用字母、數(shù)字、中劃線-、下劃線_、豎線|、星號(hào)*這些英文半角字符的組合,請(qǐng)勿使用漢字或全角等特殊字符,且在同一個(gè)商戶號(hào)下唯一。

    更多參數(shù)、響應(yīng)詳情及錯(cuò)誤碼請(qǐng)參見(jiàn)服務(wù)人員分配API接口文檔

    3.2.3.【服務(wù)端】服務(wù)人員查詢

    步驟說(shuō)明:服務(wù)人員查詢接口用于商戶開(kāi)發(fā)者查詢已注冊(cè)的服務(wù)人員ID等信息。

    注意

    個(gè)人微信商家

  • 傳入門店ID,查詢?cè)撻T店下的所有已注冊(cè)服務(wù)人員的信息(每次查詢不可超過(guò)10條)
  • 傳入服務(wù)人員的工號(hào)(服務(wù)人員注冊(cè)時(shí)填寫)或手機(jī)號(hào),查詢單個(gè)服務(wù)人員的信息。

  • 企業(yè)微信商家

  • 傳入門店ID,查詢?cè)撻T店下的所有已注冊(cè)服務(wù)人員的信息(每次查詢不可超過(guò)10條)
  • 傳入服務(wù)人員的企業(yè)微信員工ID或手機(jī)號(hào),查詢單個(gè)服務(wù)人員的信息。
  • 服務(wù)人員注冊(cè)API和查詢API請(qǐng)求URL相同,區(qū)別主要是在body和query,請(qǐng)注意區(qū)分。

    示例代碼

    
    public void QueryGuide() throws Exception{
        //請(qǐng)求URL
        HttpGet httpGet = new HttpGet("https://api.mch.weixin.qq.com/v3/smartguide/guides?store_id=1234&sub_mchid=1234567890");
        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/smartguide/guides?store_id=1234&=sub_mch=1234567890', //請(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 QueryGuide() {
           // 初始化客戶端
        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/smartguide/guides?store_id=1234&sub_mchid=1234567890"
      // 發(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ō)明

    ? userid:?jiǎn)T工在商戶企業(yè)微信通訊錄使用的唯一標(biāo)識(shí),企業(yè)微信商家可傳入該字段查詢單個(gè)服務(wù)人員信息;不傳則查詢整個(gè)門店下的服務(wù)人員信息。

    更多參數(shù)、響應(yīng)詳情及錯(cuò)誤碼請(qǐng)參見(jiàn)服務(wù)人員查詢API接口文檔

    3.2.4.【服務(wù)端】服務(wù)人員信息更新

    步驟說(shuō)明:服務(wù)人員信息更新接口用于商戶開(kāi)發(fā)者為商戶更新門店服務(wù)人員的姓名、頭像等信息。

    注意

  • 個(gè)人微信商家、企業(yè)微信商家均支持服務(wù)人員信息更新
  • 示例代碼

    
    public void UpdateGuide() throws Exception{
        //請(qǐng)求URL
        HttpPatch httpPatch = new HttpPatch("https://api.mch.weixin.qq.com/v3/smartguide/guides/LLA3WJ6DSZUfiaZDS79FH5Wm5m4X69TBic");
        // 請(qǐng)求body參數(shù)
        String reqdata = "{"
                + 
    "\"sub_mchid\":\"1234567890\","
                + 
    "\"name\":\"pVd1HJ6v/69bDnuC4EL5Kz4jBHLiCa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==\","
                + "\"mobile\":\"pVd1HJ6v/69bDnuC4EL5Kz4jBHLiCa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==\","
                + "\"qr_code\":\"https://open.work.weixin.qq.com/wwopen/userQRCode?vcode=xxx\","
                + "\"avatar\":\"http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0\","
                + "\"group_qrcode\":\"http://p.qpic.cn/wwhead/nMl9ssowtibVGyrmvBiaibzDtp/0\""
                + "}";
        StringEntity entity = new StringEntity(reqdata,"utf-8");
        entity.setContentType("application/json");
        httpPatch.setEntity(entity);
        httpPatch.setHeader("Accept", "application/json");
    
        //完成簽名并執(zhí)行請(qǐng)求
        CloseableHttpResponse response = httpClient.execute(httpPatch);
    
        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(
            'PATCH',
            'https://api.mch.weixin.qq.com/v3/smartguide/guides/LLA3WJ6DSZUfiaZDS79FH5Wm5m4X69TBic', //請(qǐng)求URL
            [
                // JSON請(qǐng)求體
                'json' => [
                    "name" => "pVd1HJ6v/69bDnuC4EL5Kz4jBHLiCa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==", 
                    "mobile" => "pVd1HJ6v/69bDnuC4EL5Kz4jBHLiCa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==", 
                    "qr_code" => "https://open.work.weixin.qq.com/wwopen/userQRCode?vcode=xxx", 
                    "avatar" => "http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0", 
                    "group_qrcode" => "http://p.qpic.cn/wwhead/nMl9ssowtibVGyrmvBiaibzDtp/0",
                    "sub_mchid" => "1234567890",
                ],
                '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 UpdateGuide() {
           // 初始化客戶端
        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/smartguide/guides/LLA3WJ6DSZUfiaZDS79FH5Wm5m4X69TBic"
      //設(shè)置請(qǐng)求信息,此處也可以使用結(jié)構(gòu)體來(lái)進(jìn)行請(qǐng)求
      mapInfo := map[string]interface{}{
        "sub_mchid": "1234567890",
        "name": "pVd1HJ6v/69bDnuC4EL5Kz4jBHLiCa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==",
        "mobile": "pVd1HJ6v/69bDnuC4EL5Kz4jBHLiCa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==",
        "qr_code": "https://open.work.weixin.qq.com/wwopen/userQRCode?vcode=xxx",
        "avatar": "http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0",
        "group_qrcode": "http://p.qpic.cn/wwhead/nMl9ssowtibVGyrmvBiaibzDtp/0",
      }
    
      // 發(fā)起請(qǐng)求
      response, err := client.Patch(ctx, URL, mapInfo)
      if err != nil{
        log.Printf("client patch 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ō)明

    ? guide_id:務(wù)人員在支付即服務(wù)系統(tǒng)中的唯一標(biāo)識(shí)。

    更多參數(shù)、響應(yīng)詳情及錯(cuò)誤碼請(qǐng)參見(jiàn)服務(wù)人員信息更新API接口文檔

    4. 常見(jiàn)問(wèn)題

    Q:使用服務(wù)人員注冊(cè)API進(jìn)行注冊(cè)時(shí),sub_mchid(子商戶ID)應(yīng)該傳什么?

    A:如果是普通特約商戶自己調(diào)接口,不傳即可;如果是服務(wù)商幫普通特約商戶調(diào)接口,傳普通特約商戶的商戶號(hào)

    Q:企業(yè)微信的corpid如何獲取?

    A:獲取corpid可進(jìn)入企業(yè)微信的管理后臺(tái),查找路徑:【我的企業(yè)->企業(yè)信息→查看“企業(yè)ID”】(需要有管理員權(quán)限)

    Q:注冊(cè)服務(wù)人員時(shí)必須傳入門店ID嗎?在哪里找這個(gè)門店ID

    A:是的,注冊(cè)時(shí)必須傳入門店ID。該門店ID是微信支付門店系統(tǒng)的編碼,查找路徑:【登錄商戶平臺(tái)->營(yíng)銷中心→門店管理】,門店管理頁(yè)面下的門店編號(hào)即為需要填寫的門店ID(該門店信息與企業(yè)微信的門店系統(tǒng)無(wú)關(guān))。
    若未創(chuàng)建門店,則需創(chuàng)建門店并通過(guò)騰訊地圖審核后,方可使用門店ID進(jìn)行注冊(cè)。

    Q:調(diào)用服務(wù)人員分配接口是在支付前還是支付后?

    A:支付前。建議當(dāng)商家生成當(dāng)前交易的“商戶訂單號(hào)”時(shí),通過(guò)“服務(wù)人員分配API”將“服務(wù)人員ID+商戶訂單號(hào)”傳給微信支付,并按照原有流程引導(dǎo)用戶完成支付即可。若分配服務(wù)人員晚于支付完成,則將無(wú)法在支付憑證上出現(xiàn)服務(wù)人員名片入口

    Q:服務(wù)人員分配應(yīng)該采取什么樣的分配機(jī)制?

    A:使用服務(wù)人員分配API進(jìn)行分配時(shí),服務(wù)人員的分配機(jī)制由商家內(nèi)部閉環(huán),可以靈活掌控。在支付前調(diào)用分配接口時(shí),商家可自行決定分配哪名服務(wù)人員,商家可選擇隨機(jī)分配、按時(shí)間段分配,或?yàn)槟彻P訂單指定特定服務(wù)人員的分配方式(例如在線下門店支付時(shí),可分配當(dāng)前為該顧客提供服務(wù)的服務(wù)人員)。使用免開(kāi)發(fā)版本時(shí),商戶號(hào)下的所有訂單將隨機(jī)分配給不同服務(wù)人員,商家可通過(guò)小程序調(diào)整服務(wù)人員分配的時(shí)間段,但是不能針對(duì)不同訂單分配特定的服務(wù)人員



    技術(shù)咨詢

    文檔反饋