PHPackages                             nizerin/baidu-mini-program-sdk - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. nizerin/baidu-mini-program-sdk

ActiveLibrary[API Development](/categories/api)

nizerin/baidu-mini-program-sdk
==============================

百度小程序第三方 PHP SDK，助力智能小程序开发。

1.0.0(6y ago)6321MITPHPPHP &gt;=5.4

Since May 24Pushed 6y agoCompare

[ Source](https://github.com/NiZerin/baidu-mini-program-sdk)[ Packagist](https://packagist.org/packages/nizerin/baidu-mini-program-sdk)[ RSS](/packages/nizerin-baidu-mini-program-sdk/feed)WikiDiscussions master Synced today

READMEChangelog (1)Dependencies (5)Versions (2)Used By (0)

Baidu Smart Mini-Program SDK for PHP
====================================

[](#baidu-smart-mini-program-sdk-for-php)

[![](https://camo.githubusercontent.com/2c89d7e2053fdfed1f12b0ab3bb06c0a9ad5b49f36fb4debbe993c4ca0b1d7d3/68747470733a2f2f736d61727470726f6772616d2e62616964752e636f6d2f646f63732f696d672f6c6f676f2e706e67)](https://camo.githubusercontent.com/2c89d7e2053fdfed1f12b0ab3bb06c0a9ad5b49f36fb4debbe993c4ca0b1d7d3/68747470733a2f2f736d61727470726f6772616d2e62616964752e636f6d2f646f63732f696d672f6c6f676f2e706e67)

🐾 百度小程序第三方 PHP SDK，遵循 PSR-7、支持 PHP 5.4，助力智能小程序开发。

🎉 [支付宝开放平台第三方 PHP SDK](https://github.com/NiZerin/alipay-sdk-php)，[微信小程序转百度小程序注意事项](./WECHAT-TO-BAIDU.md)。

[![License](https://camo.githubusercontent.com/2bdddb9b5212906d09da86ec3c8ea0325faebf9c84767917fde8ca1a6807c6da/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f4e695a6572696e2f62616964752d6d696e692d70726f6772616d2d73646b2e737667)](https://github.com/NiZerin/baidu-mini-program-sdk)[![PHP from Packagist](https://camo.githubusercontent.com/87925158e8867c33fb043311ff41bdea29e6da2d816dccfd508de6b4c0d30f71/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f4e695a6572696e2f62616964752d6d696e692d70726f6772616d2d73646b2e737667)](https://github.com/NiZerin/baidu-mini-program-sdk)[![Packagist](https://camo.githubusercontent.com/69e890afaad49ac58efd7e5f8d7a190bca1ba62945e013ea61fb5ac6bafc4088/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f4e695a6572696e2f62616964752d6d696e692d70726f6772616d2d73646b2e737667)](https://packagist.org/packages/NiZerin/baidu-mini-program-sdk)[![Build Status](https://camo.githubusercontent.com/0f641013841fdfef857650fe0ea253d212f7c57eae801e82a84720564e848c59/68747470733a2f2f7472617669732d63692e6f72672f4e695a6572696e2f62616964752d6d696e692d70726f6772616d2d73646b2e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/NiZerin/baidu-mini-program-sdk)[![Coverage Status](https://camo.githubusercontent.com/fea06f408a9eb89bfe8caf4acd2818cd15c0d2a8cf66a028760dd757f1a55682/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f4e695a6572696e2f62616964752d6d696e692d70726f6772616d2d73646b2f62616467652e737667)](https://coveralls.io/github/NiZerin/baidu-mini-program-sdk)[![StyleCI](https://camo.githubusercontent.com/4714254cc80a77c95162059c5ceb3cd3fa8b7e3c6c85658918f601d3aa8f9e2c/68747470733a2f2f6769746875622e7374796c6563692e696f2f7265706f732f3135313535333935332f736869656c643f6272616e63683d6d6173746572)](https://github.styleci.io/repos/151553953)

- **目录**
    - [主要目的](#%E4%B8%BB%E8%A6%81%E7%9B%AE%E7%9A%84)
    - [如何使用](#%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8)
    - [其它资源](#%E5%85%B6%E5%AE%83%E8%B5%84%E6%BA%90)
    - [感想](#%E6%84%9F%E6%83%B3)
    - [协议](#%E5%8D%8F%E8%AE%AE)

主要目的
----

[](#主要目的)

目前，百度智能小程序暂时未推出官方 PHP SDK，而仅有的百度收银台 SDK 也只具备生成、验证签名功能，不足以支撑实际开发。

本项目着眼于「小程序」，集成以下功能。

1. [登录](#%E7%99%BB%E5%BD%95)
2. [解密](#%E8%A7%A3%E5%AF%86)
3. [模版消息](#%E6%A8%A1%E7%89%88%E6%B6%88%E6%81%AF)（又称「消息模板」）
4. [支付](#%E6%94%AF%E4%BB%98)（百度收银台）
5. [支付通知](#%E6%94%AF%E4%BB%98%E9%80%9A%E7%9F%A5)
6. [深入](#%E6%B7%B1%E5%85%A5)

如何使用
----

[](#如何使用)

**墙裂建议**：阅读以下文档时，请同时阅读对应方法、类的 PHPDoc，我们准备了详细的参考链接和说明。

### 准备

[](#准备)

1. 安装。

    ```
    composer require nizerin/baidu-mini-program-sdk
    ```

    > Composer 中国镜像近期处于维护状态；若无法安装，建议使用原版 Packagist 或使用 [Laravel-China 镜像](https://NiZerin.cn/documents/packagist-mirror-in-china/)。
2. 创建 `BaiduClient`。

    ```
    use BaiduMiniProgram;

    $app = new BaiduClient('App Key', 'App Secret');
    ```

    `App Key` / `App Secret` 可通过 「[小程序开发者后台](https://smartprogram.baidu.com/mappconsole/main/login)」-「智能小程序首页」-「设置」-「开发设置」查看。

    `BaiduClient` 通常情况会贯穿整条业务，除非你须要在同一套代码内处理多个小程序，否则只需在初始化阶段创建一次即可。

    如无特殊说明，以下 `$app` 均为此处的 `BaiduClient` 实例。

### 登录

[](#登录)

详细流程 [官方文档](https://smartprogram.baidu.com/docs/develop/api/open_log/) 解释得十分详尽，遵循 OAuth 2.0、过程类似微信，在此不再赘述。

例如：小程序端通过 `swan.login` 得到 `code`，随后使用 `swan.request` 发送请求，将 `code` 发至我方服务端。

我方服务端示例代码如下。

```
$credential = $app->session($code);
```

若成功，`$credential` 为数组，格式如下。

```
{
    "openid": "ABCDEFG123",
    "session_key": "xxxxxx"
}
```

若失败，则会抛出 `BaiduResponseException`。

如无特殊说明，以下 `$credential` 均为此返回值。

### 解密

[](#解密)

智能小程序可以通过各种前端接口获取百度提供的开放数据，而这些数据返回给小程序时是加密过的。

例如：小程序端通过 [`swan.getUserInfo`](http://smartprogram.baidu.com/docs/develop/api/open_userinfo/#getUserInfo/) 得到 `data` 和 `iv`，随后使用 `swan.request` 发送请求，将其发至我方服务端解密。

我方服务端示例代码如下。

```
$decrypted = $app->decrypt($data, $iv, $credential['session_key']);
```

若成功，`$decrypted` 为解密后的原始数据。

### 模版消息

[](#模版消息)

在智能小程序开发者后台创建「消息模板」后，即可发送「模板消息」，过程与微信小程序类似。不过，百度小程序支持调用开放接口增删模板消息，这为部分业务场景提供了更加便捷的解决方案。

根据 [官方文档](https://smartprogram.baidu.com/docs/develop/api/open_infomation/), 相关接口本 SDK 调用例子如下。

```
use BaiduMiniProgram\Services\BaiduTemplate; // 消息模板
use BaiduMiniProgram\Services\BaiduTemplateMessage; // 模板消息

// 获取 BaiduServiceClient 实例，此实例包含 HTTP Client，主要用于发送请求。
$serviceClient = $app->serviceClient();

// 创建 BaiduTemplate 实例，用于管理消息模板。
$template = new BaiduTemplate($serviceClient);
// 调用 $template 相关方法即可。

// 根据模板 ID，发送模板消息，可链式调用。
$data = (new BaiduTemplateMessage($templateId, $serviceClient))
    ->withKeywords([
        'keyword1' => 'foo',
        'keyword2' => 'bar',
    ])
    ->sendTo('小程序用户 Swan ID', 'Scene ID');
// $data 为发送结果，即接口响应的 `data` 字段。
```

### 支付

[](#支付)

支付部分比较特殊，百度收银台是独立的聚合支付产品线，所以小程序接入稍显复杂，需要单独注册账号并认证。

首先，按照 [官方文档](https://dianshang.baidu.com/platform/doclist/index.html#!/doc/nuomiplus_1_guide/mini_program_cashier/access_process.md) 说明，入驻平台、创建服务等。

这里单独说明 [设置中心](http://dianshang.baidu.com/platform/developer/index.html#!/set) 内几处需要注意的地方。

1. 生成密钥可使用本 SDK 附带的一键脚本。

    ```
    bin/genrsa [密钥生成目录]
    ```
2. 开发者公钥保存后，需要稍等并刷新才会有平台公钥生成。
3. 平台公钥导出后并非 PEM 格式，无法被 OpenSSL 正确识别，需进行转换；同样可使用 SDK 附带的脚本。

    ```
    bin/wrap-key
    ```

> 截至 2018.10.15，我司提交的百度支付认证审核已持续一周处在「审核中」状态。短时间内支付部分可能无法测试，如有哪位大佬审核通过，欢迎通过 Issue 联系我。

### 支付通知

[](#支付通知)

在支付成功等场景，百度会主动发起通知请求到我方服务器。我方服务器需对请求签名进行验证，确保此请求来自百度服务器，且数据未被篡改。

同时，百度规定了响应格式，我方接口必须按照指定格式响应请求。

在本 SDK 内，可直接使用如下方式实现以上两点。

```
$response = $payment->handleNotification(
    function ($parameters) {
        // 在这里编写业务逻辑，发生任何错误只需抛异常即可。
        // $parameters 是成功验证签名，并删除「签名」参数的请求参数数组。
        // 若业务逻辑成功处理，可返回一数组或对象，它将被直接填入响应 `data` 字段。
    },
    function (\Exception $exception) {
        // 在这里记录异常，例如发送到 Bugsnag 或 Sentry、记录至日志等。
        // 切勿输出任何内容，在回调通知请求内，你无法得知输出了啥。
    },
    $_POST // 此参数可忽略，默认即为 $_POST；通常用于非 PHP-FPM 等特殊场景（例如 Swoole）传入请求参数数组。
);

// 根据框架不同，可使用不同的方式输出 $response。
echo $response;
```

有点类似 JavaScript 的异步回调；在回调函数内，所有异常均会被妥善处理为指定格式响应，你需要关心的只有你的业务逻辑，并在第二个回调函数内记录一切发生的异常即可。

你也可以使用任意 [Callable](http://php.net/manual/zh/language.types.callable.php) 代替闭包。

### 深入

[](#深入)

本 SDK 遵循「[PSR-7 HTTP Message](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-7-http-message.md)」、HTTP 客户端基于「[HTTPlug](https://github.com/php-http/httplug)」,因此你可以任意定制 HTTP 客户端，只要兼容 PSR-7 即可。

[有什么好处？](https://NiZerin.cn/documents/psr7-and-httplug/)

通常情况下，本 SDK 使用内置的 [`BaiduHttpClient`](src/Client/BaiduHttpClient.php) 为默认 HTTP 客户端，此客户端使用 CURL 驱动，代码摘自 [php-http/curl-client](https://github.com/php-http/curl-client/blob/master/src/Client.php)，经过修改后支持 PHP 5.4。

当然，你可以替换成自己喜欢的客户端，查看受支持的 [客户端列表](https://packagist.org/providers/php-http/client-implementation)。

例如替换为 `Guzzle 6.x`。

```
composer require guzzlehttp/guzzle:^6.0 # 安装 Guzzle，若已安装可跳过
composer require php-http/discovery # 此扩展包用于自动发现可用的 HTTP 客户端
composer require php-http/guzzle6-adapter # 安装适配器，适配 Guzzle + HTTPlug
```

或者，你也可以自行编写一个实现 [`Http\Client\HttpClient`](https://github.com/php-http/httplug/blob/master/src/HttpClient.php) 接口的客户端，然后在类构造函数内传入即可。

例如替换为 `YourHttpClient`。

```
class YourHttpClient implements Http\Client\HttpClient
{
    public function sendRequest(Psr\Http\Message\RequestInterface $request) : Psr\Http\Message\ResponseInterface
    {
        // 发送兼容 PSR-7 RequestInterface 的请求
        // 返回兼容 PSR-7 ResponseInterface 的响应
    }
}

$app = new BaiduClient('App Key', 'App Secret', new YourHttpClient());

// 接下来，当调用 $app 内的方法、需要发送 HTTP 请求时，均会通过 YourHttpClient::sendRequest。
```

其它资源
----

[](#其它资源)

- [百度智能小程序官方文档](https://smartprogram.baidu.com/docs/develop/tutorial/codedir/)
- [百度智能小程序官方支付文档](https://dianshang.baidu.com/platform/doclist/index.html#!/doc/nuomiplus_1_guide/mini_program_cashier/product_intro.md)
- [百度小程序开发资源汇总](https://github.com/quickappdev/awesome-smartapp)
- [微信小程序转百度小程序评估](./WECHAT-TO-BAIDU.md)

感想
--

[](#感想)

在研究小程序支付部分时，居然发现其 [签名过程](https://dianshang.baidu.com/platform/doclist/index.html#!/doc/nuomiplus_2_base/sign_v2.md)、[SDK](https://dianshang.baidu.com/platform/doclist/index.html#!/doc/nuomiplus_3_business/moneycourt/settle.md) 等几乎与 [支付宝开放平台 SDK](https://docs.open.alipay.com/54/103419/) 一模一样。但从修改日期来看，支付宝是 2014 年，百度是 2016 年，且百度的代码相对规范些。

难不成... 是大佬被挖走了？

协议
--

[](#协议)

MIT

欢迎 Issue / PR。

欢迎关注我们的产品。

[![](https://camo.githubusercontent.com/9be2295cbcf35cdcafda63714e3cdd6d79af40c8fa3ddfa737538ff151e326da/68747470733a2f2f692e6c6f6c692e6e65742f323031382f30372f32342f356235366464613736623262612e706e67)](http://www.zjhejiang.com/)

###  Health Score

26

—

LowBetter than 43% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity13

Limited adoption so far

Community4

Small or concentrated contributor base

Maturity54

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

2543d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/573fcf255345bc64772d2c61b862bd91ff59089560d78094eb218a4df1d72e35?d=identicon)[nizerin](/maintainers/nizerin)

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/nizerin-baidu-mini-program-sdk/health.svg)

```
[![Health](https://phpackages.com/badges/nizerin-baidu-mini-program-sdk/health.svg)](https://phpackages.com/packages/nizerin-baidu-mini-program-sdk)
```

###  Alternatives

[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.4k5.6M650](/packages/sylius-sylius)[php-heroku-client/php-heroku-client

A PHP client for the Heroku Platform API

24404.8k4](/packages/php-heroku-client-php-heroku-client)[j0k3r/graby

Graby helps you extract article content from web pages

384349.6k1](/packages/j0k3r-graby)[php-opencloud/openstack

PHP SDK for OpenStack APIs. Supports BlockStorage, Compute, Identity, Images, Networking and Metric Gnocchi

2292.2M24](/packages/php-opencloud-openstack)[janu-software/facebook-php-sdk

Alternative toolkit for Facebook Graph API

71684.8k2](/packages/janu-software-facebook-php-sdk)[paddlehq/paddle-php-sdk

Paddle's PHP SDK for Paddle Billing.

53301.7k](/packages/paddlehq-paddle-php-sdk)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
