# 扫码支付

## 一、支付回调接口

业务方调用微信扣费接口之后，接收扣费结果通知。

### 1. 请求参数

| 参数名称       | 类型   | 必选 | 备注                   |
| -------------- | ------ | ---- | ---------------------- |
| appid          | string | Y    | 小程序                 |
| appidmch_id    | string | Y    | 支付商户号             |
| nonce_str      | string | Y    | 随机字符串             |
| encrypted_data | string | Y    | 使用AESCBCPKCS7PADDING |
| iv             | string | Y    | 用于解密的IV           |
| sign           | string | Y    | 1~5字段的签名          |

解密后的参数如下：

| 参数名称       | 类型   | 必选 | 备注                                                                                |
| -------------- | ------ | ---- | ----------------------------------------------------------------------------------- |
| openid         | string | Y    | 用户在小程序appid下的openid                                                         |
| bank_type      | string | Y    | 支付类型                                                                            |
| total_fee      | int    | Y    | 支付总额，单位为分                                                                  |
| trade_state    | string | Y    | 支付状态：SUCCESS/FAIL                                                              |
| trade_msg      | string | N    | 支付失败时返回                                                                      |
| transaction_id | string | Y    | 微信支付单号                                                                        |
| out_trade_no   | string | Y    | 乘车码业务方单号                                                                    |
| attach         | string | N    | 扣费API的入参，原样带回                                                             |
| time_end       | string | Y    | 支付完成时间，格式为yyyyMMddHHmmss，如2009年12月25日9点10分10秒表示为20091225091010 |
| qrcode         | string | Y    | 二维码                                                                              |

### 2. 返回参数

| 参数名称  | 类型   | 必选 | 备注     |
| --------- | ------ | ---- | -------- |
| errcode   | int    | Y    | 0为成功  |
| errmsg    | string | N    | 错误信息 |
| nonce_str | string | Y    | 原样带回 |

### 3. 示例代码

```json
{"appid":"test","mch_id":"123456","nonce_str":"abcdefg","encrypted_data":"jfiwajeofjiefef","iv":"afweifwefe"}
```

解密后数据：

```json
{"openid":"fafwefawef","bank_type":"CFT","total_fee":100,"trade_state":"SUCCESS",...}
```

## 二、微信扣费接口（微信API接口）

用于接收业务方依据扫码接口获取到的信息对用户进行免密扣费。

### 1. 请求参数

| 参数名称          | 类型   | 必选 | 备注                                         |
| ----------------- | ------ | ---- | -------------------------------------------- |
| qrcode            | string | Y    | 乘车码数据，需要base64                       |
| total_fee         | int    | Y    | 支付总额，分为单位（优惠后）                 |
| original_fee      | int    | Y    | 支付总额，分为单位（优惠前）                 |
| machine_ip        | string | N    | 扫码机接入IP                                 |
| machine_latitude  | float  | N    | 扫码机GPS纬度                                |
| machine_longitude | float  | N    | 扫码机GPS经度                                |
| body              | string | Y    | 公交代扣/地铁代扣                            |
| start_time        | string | Y    | 上车/乘车时间，如20091225091010              |
| end_time          | string | N    | 下车时间，格式同上，适用于二次刷码的场景     |
| line_name         | string | Y    | 乘车线路                                     |
| trade_scene       | string | Y    | METRO/BUS                                    |
| start_qrcode      | string | N    | 二次刷码时，传入首次刷码使用的二维码         |
| out_order_no      | string | N    | 业务方自定义订单号，需要保证唯一             |
| attach            | string | N    | 业务方自定义数据，对账单和查询接口会原样返回 |

### 2. 返回参数

| 参数名称 | 类型   | 必选 | 备注     |
| -------- | ------ | ---- | -------- |
| errcode  | int    | Y  | 返回码   |
| errmsg   | string | N    | 返回信息 |

### 3. 示例代码

入参：

```json
{"qrcode":"afefawefwef",....}
```

返回

```json
{"errcode":0,....}
```
