开发指引

更新时间:2025.03.21

1. 接口规则

为了在保证支付安全的前提下,带给商户简单、一致且易用的开发体验,我们推出了全新的微信支付APIv3接口。该版本API的具体规则请参考APIv3接口规则

2. 开发准备

2.1. 搭建和配置开发环境

开发者应当依据自身的编程语言来构建并配置相应的开发环境。

3. 快速接入

3.1. 业务流程图

重点步骤说明:

步骤1 配置出行乘车券

步骤2.3 出行券发放后,商户可通过《出行券切卡组件预下单API》获取拉起小程序需要的token参数。

步骤2.5 获取token后,商户可按照《拉起快捷切卡小程序》部分的描述拉起小程序。

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

文档展示了如何使用微信支付服务端 SDK 快速接入智慧商圈产品,完成与微信支付对接的部分。

注意

  • 文档中的代码示例是用来阐述 API 基本使用方法,代码中的示例参数需替换成商户自己账号及请求参数才能跑通

  • 以下接入步骤仅提供参考,请商户结合自身业务需求进行评估、修改。

3.2.1. 【服务端】出行券切卡组件预下单

步骤说明: 该接口为拉起快捷切卡小程序的前置步骤,通过调用快捷切卡组件预下单API获取授权token。

JAVA示例代码:

1public void BuildRelations() throws Exception{
2    //请求URL
3    HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/v3/industry-coupon/tokens");
4    // 请求body参数
5    String reqdata = "{"
6            + "\"open_id\": \"obLatjrR8kUDlj4-nofQsPAJAAFI\","
7            + "\"coupon_list\": {"
8            + "\"coupon_id\":\"11005526091\","
9            + "\"stock_id\":16584651"
10            + "}"
11            + "}";
12    StringEntity entity = new StringEntity(reqdata,"utf-8");
13    entity.setContentType("application/json");
14    httpPost.setEntity(entity);
15    httpPost.setHeader("Accept", "application/json");
16    //完成签名并执行请求
17    CloseableHttpResponse response = httpClient.execute(httpPost);
18    try {
19        int statusCode = response.getStatusLine().getStatusCode();
20        if (statusCode == 200) { //处理成功
21            System.out.println("success,return body = " + EntityUtils.toString(response.getEntity()));
22        } else if (statusCode == 204) { //处理成功,无返回Body
23            System.out.println("success");
24        } else {
25            System.out.println("failed,resp code = " + statusCode+ ",return body = " + EntityUtils.toString(response.getEntity()));
26            throw new IOException("request failed");
27        }
28    } finally {
29        response.close();
30    }
31}

PHP示例代码:

1try {
2    $resp = $client->request(
3        'POST',
4        'https://api.mch.weixin.qq.com/v3/industry-coupon/tokens', //请求URL
5        [
6            // JSON请求体
7            'json' => [
8                "open_id" => "obLatjiVCpXycAp8CWjsD5oAzHQ4",
9                "coupon_list" => [
10                    "coupon_id" => "11005526091", 
11                    "stock_id" => 16584651, 
12                ]
13            ],
14            'headers' => [ 
15                'Accept' => 'application/json'
16            ]
17        ]
18    );
19    $statusCode = $resp->getStatusCode();
20    if ($statusCode == 200) { //处理成功
21        echo "success,return body = " . $resp->getBody()->getContents()."\n";
22    } else if ($statusCode == 204) { //处理成功,无返回Body
23        echo "success";
24    }
25} catch (RequestException $e) {
26    // 进行错误处理
27    echo $e->getMessage()."\n";
28    if ($e->hasResponse()) {
29        echo "failed,resp code = " . $e->getResponse()->getStatusCode() . " return body = " . $e->getResponse()->getBody() . "\n";
30    }
31    return;
32}

重要入参说明:

  • open_id: OpenID是微信用户在AppID下的唯一用户标识(AppID不同,则获取到的OpenID就不同),可用于永久标记一个用户。OpenID获取方式请参考以下文档小程序获取OpenID、公众号获取OpenID、App获取OpenID。

  • coupon_id: 微信为代金券唯一分配的ID。

  • stock_id: 批次号,微信为每个代金券批次分配的唯一ID。

注意

更多参数、响应详情及错误码请参见出行券切卡组件预下单API接口文档

3.2.2. 【服务端】接收商圈支付结果通知

步骤说明:引导切卡流程在独立的小程序中执行,调用方通过跳转小程序的方式可以快速拉起。

示例代码:

1let mch_code = ''; // 商户的mchCode
2let token = ''; // token通过API获取
3// 调用跳转小程序的接口,跳转到引导切卡组件
4wx.navigateToMiniProgram({
5  appId: 'wx179335ce27355ca8',
6  path: `trafficCoupon/pages/index/index?mch_code=${mch_code}&token=${token}`,
7  success() {
8    // 跳转成功
9  },
10  fail() {
11    // 跳转失败
12  }
13});

注意

更多参数、响应详情及错误码请参见拉起快捷切卡小程序接口文档