去评论
dz插件网

在 X5 中拓展自己的支付

饾暦饾枎饾枒饾枏饾枂饾枅饾枑
2025/05/01 08:16:17
一直以来,Discuz! 的站长有一个痛苦,安装了2个支付相关的插件,一个支付一个界面,界面极为不统一。


这种问题在 X5 时代彻底终极了。其实相关接口 X3.5 的时候已经出了,只是没对外公开过文档,很少有人知道。但是在 X5 中不仅拓展了它,还彻底优化加强了。

容我细细道来~~咳咳!

假设我们制作了一个需要用户支付的插件,现在到了支付的地方,你要自己开发支付接口吗?不必哦。你只需要对接 X5 自己的支付接口就行了,如下图,假设我们定好了价格只需调用创建订单的接口,生成一个链接,让用户点击


就会调到统一的系统支付页面

支付完成后会跳回到插件自己的页面中


而这流程你只需要调用一个函数:
  1. $ret = payment::create_order('sample:test', 'test title', 'test desc', $price, $_G['siteurl'].'/index.php?app=plugin&id=sample:pay_callback');
$ret 为返回的链接,你视情况输出即可

然后在 pay_callback.inc.php 脚本中可以直接判断支付完成后的处理过程

另一方面

如果您想对接自己的支付体系,也是可以的,我们支持开发者新增新的支付通道

通过如下代码,创建一个新的通道
  1. payment::channels_add('sample', [    'id' => 'sample:test',    'title' => 'sample',    'logo' => 'static/image/common/logo.svg',                ]);
删除可以这样
  1. payment::channels_delete('sample');
这样支付的时候自然会出现你新增的支付方式

pay/pay_test.php 脚本中我们可以定义此支付体系的具体支付过程
  1. class pay_test extends \pay_base {      public function pay($order) {      ......      }}
在 pay_notify.inc.php 中可以进行支付完成的通知的接收
  1. payment::finish_order('sample:test', $_GET['out_biz_no'], $_GET['trade_no'], time());
在 pay/pay_test.php 中完成回调处理
  1. class pay_test extends \pay_base {      public function callback($data, $order) {      ......      }}
同时,我们还为自定义支付通道的插件提供了,直接嵌入后台的入口,添加 admin/payment/payment_test.php 文件接口把你增加的支付方式的设置内嵌在后台和系统的设置项放在一起

  1. class payment_test {    var $name = 'test支付';    public function admincp() {    }}