PHPackages                             moonpie/mp-virtual-pay - 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. moonpie/mp-virtual-pay

ActiveLibrary

moonpie/mp-virtual-pay
======================

WeChat Mini Program Virtual Payment for EasyWeChat

v1.0.0(1mo ago)01↓100%MITPHPPHP &gt;=7.2

Since Mar 17Pushed 1mo agoCompare

[ Source](https://github.com/JingxuanZhang/moonpie_mp_virtual_pay)[ Packagist](https://packagist.org/packages/moonpie/mp-virtual-pay)[ Docs](https://github.com/JingxuanZhang/moonpie_mp_virtual_pay)[ RSS](/packages/moonpie-mp-virtual-pay/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (2)Versions (2)Used By (0)

Moonpie MP Virtual Pay
======================

[](#moonpie-mp-virtual-pay)

WeChat Mini Program Virtual Payment for EasyWeChat

微信小程序虚拟支付 for EasyWeChat

安装
--

[](#安装)

```
composer require moonpie/mp-virtual-pay
```

配置
--

[](#配置)

```
use EasyWeChat\MiniProgram\Application;
use Moonpie\EasyWechat\VirtualPay\VirtualPayServiceProvider;

$config = [
    'app_id' => 'wx-app-id',
    'secret' => 'wx-app-secret',
    'response_type' => 'array',

    // 虚拟支付配置
    'virtual_pay' => [
        'offer_id' => 'your offer id',
        'app_key' => 'your-prod-app-key',
        'sandbox_app_key' => 'your-sandbox-app-key',
        'env' => 0, // 0-正式环境 1-沙箱环境
    ],
];

$miniProgram = new Application($config);
$miniProgram->register(new VirtualPayServiceProvider());
```

### 使用示例

[](#使用示例)

```
// 1. 查询用户余额（需要用户态签名）
$balance = $miniProgram->virtual_pay_balance->queryUserBalance(
    'user-openid',
    '127.0.0.1',
    $userSessionKey // 从用户登录获取
);

// 2. 扣减代币（需要用户态签名）
$result = $miniProgram->virtual_pay_currency->currencyPay([
    'openid' => 'user-openid',
    'amount' => 100,
    'order_id' => 'order-123',
    'user_ip' => '127.0.0.1',
    'payitem' => json_encode([[
        'productid' => 'item-001',
        'unit_price' => 100,
        'quantity' => 1
    ]])
], $userSessionKey);

// 3. 查询商家余额（不需要用户态签名）
$bizBalance = $miniProgram->virtual_pay_balance->queryBizBalance();

// 4. 代币赠送（不需要用户态签名）
$presentResult = $miniProgram->virtual_pay_currency->presentCurrency([
    'openid' => 'user-openid',
    'order_id' => 'present-001',
    'amount' => 50,
]);

// 5. 查询订单
$order = $miniProgram->virtual_pay_order->queryOrder('order-123');//使用商家订单号
$order = $miniProgram->virtual_pay_order->queryWxOrder('wx-order-123');//使用微信订单号

// 6. 退款
$refund = $miniProgram->virtual_pay_order->refundOrder([
    'openid' => 'user-openid',
    'order_id' => 'order-123',
    'refund_order_id' => 'refund-001',
    'left_fee' => 100,
    'refund_fee' => 100,
    'refund_reason' => '0',
    'req_from' => '2',
]);
// 7. 发起支付, 需要sessionKey
$signData = [
'buyQuantity' => 1, //number		是	购买数量
'env' => 0, //number		否	环境配置, 0 米大师正式环境, 1 米大师沙箱环境, 默认为 0
'currencyType' => 'CNY', //string		是	币种 合法值	说明 CNY	人民币
'productId' => '', string		否	道具ID, **该字段仅mode=short_series_goods时需要必填**
'goodsPrice' => 100, //number		否	道具单价(分), **该字段仅mode=short_series_goods时需要必填**, 用来校验价格与后台道具价格是否一致, 避免用户在业务商城页看到的价格与实际价格不一致导致投诉
'activitySellingPrice' => 40, //number		否	道具优惠价格（分），**非必填，该字段需与goodsPrice一起传入**。如用户使用优惠券、积分等，需要以低于道具价格下单时可传入，传入后该价格即为实际下单价格，优惠价格最低为道具价格的40%。（注：iOS端暂不支持使用优惠价格下单）
'outTradeNo' => 'unique order no', //string		是	业务订单号, 每个订单号只能使用一次, 重复使用会失败(极端情况不保证唯一, 不建议业务强依赖唯一性).  要求8-32个字符内, 只能是数字、大小写字母、符号 _-|*@组成, 不能以下划线(_)开头
'attach' => '', //	string		是	透传数据, 发货通知时会透传给
];
$mode = 'short_series_goods';//可选项short_series_goods	道具直购|short_series_coin	代币充值
$virtualPayData = $miniProgram->virtual_pay_order->buildVirtualPayData($signData, $mode, $sessionKey);

// 8. 消息通知回调
//添加统一的消息监听器
use EasyWeChat\Kernel\Messages\Message;
$dispatcher = $app->events;
$dispatcher->addListener('xpay_goods_deliver_notify', callable(Event\GoodsDeliveredEvent $event));//道具发货推送
$dispatcher->addListener('xpay_coin_pay_notify', callable(Event\CoinPaidEvent $event));//代币支付推送
$dispatcher->addListener('xpay_refund_notify', callable(Event\RefundProcessedEvent $event));//退款推送
$dispatcher->addListener('xpay_complaint_notify', callable(Event\ComplaintFiledEvent $event));//用户投诉推送
$handler = new Moonpie\EasyWechat\VirtualPay\Server\Handlers\VirtualPayEventHandler($dispatcher, $app);
$app->server->push($handler, Message::EVENT);
$response = $app->server->serve();
//如何处理$response需要针对不同框架对Symfony Response的支持区别对待
//使用者的重心将集中到如何编写具体事件的callable
//其中callback中的返回数据是该$event, 使用以下方法来生成微信要求的response
return $event->markOk();//返回正常
return $event->markFail(reason);//返回错误
```

---

📚 API 模块说明
----------

[](#-api-模块说明)

### Balance（余额管理）

[](#balance余额管理)

- `queryUserBalance($openid, $userIp, $sessionKey)` - 查询用户代币余额
- `queryBizBalance()` - 查询商家账户余额

### Order（订单管理）

[](#order订单管理)

- `buildVirtualPayData($signData, $mode, $sessionKey)` - 生成wx.requestVirtualPayment需要的支付信息(下单);
- `queryOrder($orderId, $openid, $env)` - 查询订单
- `notifyProvideGoods($orderId, $wxOrderId, $env)` - 通知发货
- `refundOrder($params)` - 订单退款

### Currency（代币管理）

[](#currency代币管理)

- `currencyPay($params, $sessionKey)` - 扣减代币
- `cancelCurrencyPay($params, $sessionKey)` - 代币支付退款
- `presentCurrency($params)` - 代币赠送

### Goods（道具管理）

[](#goods道具管理)

- `startUploadGoods($uploadItem, $env)` - 启动批量上传道具
- `queryUploadGoods($env)` - 查询上传道具任务
- `startPublishGoods($publishItem, $env)` - 启动批量发布道具
- `queryPublishGoods($env)` - 查询发布道具任务

### Withdraw（提现管理）

[](#withdraw提现管理)

- `createWithdrawOrder($params)` - 创建提现单
- `queryWithdrawOrder($withdrawNo, $env)` - 查询提现单

### Fund（广告金管理）

[](#fund广告金管理)

- `queryTransferAccount($env)` - 查询广告金充值账户
- `queryAdverFunds($params)` - 查询广告金发放记录
- `createFundsBill($params)` - 充值广告金
- `bindTransferAccount($params)` - 绑定广告金充值账户
- `queryFundsBill($params)` - 查询广告金充值记录
- `queryRecoverBill($params)` - 查询广告金回收记录
- `downloadAdverfundsOrder($fundId, $env)` - 下载广告金订单

### Complaint（投诉管理）

[](#complaint投诉管理)

- `getComplaintList($params)` - 获取投诉列表
- `getComplaintDetail($complaintId, $env)` - 获取投诉详情
- `getNegotiationHistory($complaintId, $offset, $limit, $env)` - 获取协商历史
- `responseComplaint($complaintId, $responseContent, $responseImages, $env)` - 回复用户
- `completeComplaint($complaintId, $env)` - 完成投诉处理
- `uploadVpFile($params)` - 上传媒体文件
- `getUploadFileSign($wxpayUrl, $convertCos, $complaintId, $env)` - 获取文件下载签名

### Bill（账单管理）

[](#bill账单管理)

- `downloadBill($beginDs, $endDs)` - 下载小程序账单

要求
--

[](#要求)

- PHP &gt;= 7.2
- easywechat/easywechat: ^4.0

许可证
---

[](#许可证)

MIT 许可证 - 详情请参见 [LICENSE](LICENSE)。

###  Health Score

32

—

LowBetter than 72% of packages

Maintenance89

Actively maintained with recent releases

Popularity2

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity28

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

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

54d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/6268d7fce91a192bdfd2a013aa9ac47d8e766cfcc0317b4bacf54fb1f0f09224?d=identicon)[xiakexingdege](/maintainers/xiakexingdege)

---

Top Contributors

[![JingxuanZhang](https://avatars.githubusercontent.com/u/8163629?v=4)](https://github.com/JingxuanZhang "JingxuanZhang (11 commits)")

---

Tags

wechateasywechatmini programvirtual-payment

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/moonpie-mp-virtual-pay/health.svg)

```
[![Health](https://phpackages.com/badges/moonpie-mp-virtual-pay/health.svg)](https://phpackages.com/packages/moonpie-mp-virtual-pay)
```

###  Alternatives

[w7corp/easywechat

微信SDK

10.4k761.6k60](/packages/w7corp-easywechat)[naixiaoxin/think-wechat

EasyWechat For Thnkphp5.1+

27316.1k1](/packages/naixiaoxin-think-wechat)[jianyan74/yii2-easy-wechat

WeChat SDK for yii2, 基于 overtrue/easywechat

14339.4k1](/packages/jianyan74-yii2-easy-wechat)

PHPackages © 2026

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