> For the complete documentation index, see [llms.txt](https://payment.gitbook.io/mpay/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://payment.gitbook.io/mpay/summary/interfaces/transferpay.md).

# 1.2.3.1 支付宝扫码

### 转账支付

**接入方式**

`POST` 方式

**方法名**

`shop.transfer.pay`

**参数**

**公共参数**

| 参数           |  参数名称 | 类型          | 必填 | 描述           | 范例                |
| ------------ | :---: | ----------- | -- | ------------ | ----------------- |
| mch\_id      |  商户号  | String(64)  | 是  | 商户唯一标识符      | 10008             |
| sub\_mch\_id |  子商户号 | String(64)  | 是  | 子商户，默认为空     | 10088             |
| method       |  接口名  | String(128) | 是  | 接口名称         | shop.transfer.pay |
| version      |  版本号  | String(8)   | 是  | 接口版本，固定为：1.0 | 1.0               |
| timestamp    |  时间戳  | String(128) | 是  | 发送请求的时间      | 1515984627        |
| content      |  业务参数 | String(256) | 是  | 业务请求参数的集合    | 详见demo            |
| sign         | 签名字符串 | String(256) | 是  | 商户请求参数的签名串   | 详见demo            |

> 业务请求参数的集合，最大长度不限，除公共参数外所有请求参数都必须放在这个参数中传递，具体参照各产品快速接入文档

**业务参数**

| 参数          | 参数名称 |      类型     | 必填 | 描述         | 范例                             |
| ----------- | ---- | :---------: | -- | ---------- | ------------------------------ |
| total\_fee  | 金额   |  Float(128) | 是  | 订单转账金额     | 100.00                         |
| order\_sn   | 订单号  | String(256) | 是  | 商家平台订单号    | CL1534216626188                |
| goods       | 商品名称 | String(128) | 是  | 商品名称       | 转账测试商品                         |
| pay\_type   | 支付方式 |  String(32) | 是  | 1 支付宝 2 微信 | 1                              |
| user\_id    | 用户别号 |  String(64) | 是  | 用户唯一识别号    | 10                             |
| notify\_url | 异步地址 | String(128) | 是  | 异步通知地址     | <https://www.baidu.com/notify> |
| return\_url | 同步地址 | String(128) | 是  | 同步通知地址     | <https://www.baidu.com/return> |

**返回字段**

**返回参数**

| 参数   | 类型     | 是否必填 | 描述                                                                                |
| ---- | ------ | :--: | --------------------------------------------------------------------------------- |
| code | int    |   是  | 状态码，`0`为成功，其他为失败，[详见错误码列表](https://chilong.doc.eooo.biz/_book/md/error-list.html) |
| msg  | string |   是  | 错误信息                                                                              |
| data | array  |   是  | 返回数据集                                                                             |

**返回订单数据字段列表**

| 参数                 | 类型     | 是否必填 | 描述                |
| ------------------ | ------ | :--: | ----------------- |
| mch\_id            | int    |   是  | 商户id              |
| sub\_mch\_id       | string |   是  | 子账户id，如果存在，否则返回为空 |
| order\_no          | string |   是  | 平台订单号             |
| channel\_order\_no | string |   是  | 二维码识别号            |
| mch\_order\_no     | string |   是  | 商户订单唯一订单号         |
| price              | float  |   是  | 金额                |
| total\_fee         | float  |   是  | 总代扣金额             |
| pay\_url           | string |   是  | 支付url             |
| rate               | string |   是  | 费率                |
| service\_charge    | float  |   是  | 服务费               |
| expire\_time       | float  |   是  | 订单过期时间            |

**响应结果**

**请求成功**

```javascript
{
    "code":0,
    "msg":"订单创建成功",
    "data":{
        "mch_id":"10000",
        "sub_mch_id":"",
        "order_no":"T100001809271535453396",
        "channel_order_no":"T000180925142202524",
        "mch_order_no":"35471538033744",
        "price":"0.01",
        "total_fee":"0.01",
        "pay_url":"{host}/transfer_pay.html?order_no=TtRSRyHzu7WEU1Gs21bS%2BezHDbSYXV9VZP5NOTes4ehDdYgaEObn54XmlRKjNS%2FNaoOky6HGdoNyQjl19wt%2Bcp7pqooqywyMkc%2BD5B7z383memnYv1FE4jtbn6rKbJwifWzDgkxvPEzjVQwJzP8W1YASoyWgCSPWNDbW%2FUseltE%3D",
        "rate":"0.0100",
        "service_charge":0,
        "expire_time":1538034345
    }
}
```

**请求异常**

```javascript
{
    "code": -1,
    "msg": "[100004] APP服务不在线",
    "data": {}
}
```

**请求参考 DEMO**

```php
// 请求操作
public function  agentsRequest()
{
        $mch_id = 10000; // 商户ID
        $sub_mch_id = 100001; // 子商户号
        // 请求内容
        $content = [
            'sub_mch_id' => $sub_mch_id,
            'sub_mch_key' => 'e65f79cf10fb34216477de549d0d57a8',
            'total_fee' => 200,
            'order_sn' => date('YmdHis', time()),
            'goods' => '代付商品00009',
            'pay_type' => 1,
            'user_id' => 1,
            'notify_url' => 'http://newpay.frp.tinywan.top/index/demo_test/transferNotify',
            'return_url' => 'http://newpay.frp.tinywan.top/index/demo_test/transferNotify',
        ];

        // 请求数据
        $data = [
            'mch_id' => $mch_id,
            'sub_mch_id' => $sub_mch_id,
            'method' => 'shop.transfer.pay',
            'version' => '1.0',
            'timestamp' => time(),
            'content' => json_encode($content)
        ];

        // 签名 该方法请详见官方 SDK文档 【接口签名处理】->【生成签名】sign()
        $sign = $this->sign($data, $mch_id);
        Log::debug('[客户端] 签名字符串' . $sign);
        if (!$sign) {
            return ['success' => false, 'message' => '签名失败', 'code' => -1, 'data' => []];
        }
        $data['sign'] = $sign;

        // 将所有参数urlcode编码，防止中文乱码
        foreach ($data as &$item) {
            $item = urlencode($item);
        }
        unset($item);
        $url = 'https://pay.hongnaga.com/api/v1/gateway.do';

        // 发起接口请求
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_TIMEOUT, 60);
        //设置抓取的url
        curl_setopt($curl, CURLOPT_URL, $url);
        //设置头文件的信息作为数据流输出
        curl_setopt($curl, CURLOPT_HEADER, 0);
        //设置获取的信息以文件流的形式返回，而不是直接输出。
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        //设置post方式提交
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_HTTPHEADER, array("Expect:"));
        //设置post数据
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        //执行命令
        $result = curl_exec($curl);
        //关闭URL请求
        curl_close($curl);
        return $result;
}

// 签名方法
private function sign($data, $mch_id)
{
    // 参数解码
    foreach ($data as $key => &$value) {
        $value = urldecode($value);
    }
    unset($value);
    // 过滤掉无效的参数
    if (isset($data['sign'])) {
        unset($data['sign']);
    }
    // 商户秘钥key，可以通过商户管理平台【商户管理】=》【商户资料】
    $key = "4845c24ee71e78f8e394afae1ce4bc36";
    ksort($data);
    $params_str = urldecode(http_build_query($data));
    $params_str = $params_str . '&key=' . $key;
    return md5($params_str);
}
```
