<p align="center">
<a href="https://packagist.org/packages/code-lives/ali" target="_blank"><img src="https://img.shields.io/packagist/v/code-lives/ali?include_prereleases" alt="GitHub forks"></a>
<a href="https://packagist.org/packages/code-lives/ali" target="_blank"><img src="https://img.shields.io/github/stars/code-lives/ali?style=social" alt="GitHub forks"></a>
<a href="https://github.com/code-lives/ali/fork" target="_blank"><img src="https://img.shields.io/github/forks/code-lives/ali?style=social" alt="GitHub forks"></a>

</p>

|                         第三方                          | token | openid | 支付 | 回调 | 退款 | 订单查询 | 解密手机号 | 分账 | 模版消息 |
| :-----------------------------------------------------: | :---: | :----: | :--: | :--: | :--: | :------: | :--------: | :--: | :------: |
| [支付宝小程序](https://opendocs.alipay.com/mini/03l5wn) |   x   |   ✓    |  ✓   |  ✓   |  ✓   |    ✓     |     ✓      |  x   |    ✓     |

## 安装

```php
composer require code-lives/ali 1.0.0
```

### ⚠️ 注意

> 金额单位分 100=1 元

> 返回结果 array 由开发者自行判断

# 预下单

```php

//引入命名空间
use Applet\Assemble\Ali;

// 小程序下单
$pay= Ali::init($config)->set("订单号","金额","描述",'openid')->getParam();

```

# 支付宝小程序

> 使用密钥进行签名解密,没有使用证书签名解密。

> 订单查询、退款、参数设置可以设置其他,具体看文档。

> 返回值 看官方文档,每个返回值都不一样,自行判断,如 openid 返回[alipay_system_oauth_token_response] 退款返回[alipay_trade_create_response]

### Config

| 参数名字   | 类型   | 必须 | 说明                         |
| ---------- | ------ | ---- | ---------------------------- |
| appid      | string | 是   | 小程序 appid                 |
| secret     | string | 是   | 小程序 AES 用于手机号解密    |
| privateKey | string | 是   | 应用私钥(开发工具生成)     |
| publicKey  | string | 是   | 支付宝公钥(支付宝后台下载) |
| notify_url | string | 是   | 异步回调地址                 |

### Openid

> getOpenid 获取支付宝的用户 user_id 类似于微信的 openid

```php
$code="";
$data= Ali::init($config)->getOpenid($code);
//返回参数
$data = array(
    [alipay_system_oauth_token_response] => Array
        (
            [access_token] => 123
            [alipay_user_id] => 123
            [auth_start] => 2023-03-26 20:56:36
            [expires_in] => 1296000
            [re_expires_in] => 2592000
            [refresh_token] => auth
            [user_id] => 123
        )
    [sign] =>
    )
```

### 解密手机号

```php
$data= Ali::init($config)->decryptPhone($session_key, $iv, $encryptedData);
echo $phone['mobile'];
```

### 订单查询

```php
$data = Ali::init($config)->findOrder(['out_trade_no' => '1679838318']);
```

### 退款

| 参数名字      | 类型   | 必须 | 说明       |
| ------------- | ------ | ---- | ---------- |
| out_trade_no  | string | 是   | 平台订单号 |
| refund_amount | int    | 是   | 退款金额   |

```php
$orders = [
        'out_order_no' => $order['out_order_no'],
        'refund_amount' => $order['refund_amount'],
    ];
$data= Ali::init($config)->applyOrderRefund($order);
```

### 模版消息

模版消息设置比较麻烦。需要先到开发平台添加进入小程序进行产品绑定,在去商家平台设置[文档](https://opendocs.alipay.com/b/03ksho)

```php
$data = [
        'to_user_id' => '用户uid',
        'user_template_id' => '模版id',
        'page' => 'pages/index/index',
        'data' => json_encode([
            'keyword1' => ['value' => '1'],
            'keyword2' =>  ['value' => '2'],
            'keyword3' => ['value' => '3'],
        ]),
    ];
$data= Ali::init($config)->sendMsg($data,$token);
```

## 支付回调

```php
$pay = Ali::init($config);
$status = $pay->notifyCheck(); //验证
if ($status) {
    $order = $pay->getNotifyOrder(); //订单数据
    //$order['out_trade_no']//平台订单号
}
```