- 准备工作:注册微信商户平台,获取必要的配置参数。
- 选择并下载支付插件:DedeCMS 本身不带支付功能,需要第三方插件。
- 安装与配置插件:将插件上传到网站,并在后台进行配置。
- 调用支付接口:在前台模板中,将需要支付的商品或服务与支付插件关联起来。
- 处理支付结果:配置支付成功后的回调页面,更新订单状态。
第一步:准备工作(在微信商户平台操作)
这是最关键的一步,请务必仔细操作。

-
注册与登录:
- 访问 微信商户平台,使用你的邮箱或手机号注册并登录。
-
完善产品信息:
- 登录后,进入 产品中心 -> 开发配置。
- 你需要选择开通支付产品,对于网站支付,最常用的是 JSAPI 支付(在微信内置浏览器中调用)和 Native 支付(生成二维码,用微信扫码支付)。
- 根据你的需求开通相应产品,如果是网站 PC 端支付,通常需要 Native 支付;如果是移动端 H5 页面,则使用 JSAPI 支付,我们以最通用的 Native 支付 为例进行讲解。
-
获取 API 密钥 (API Key / APIv3 密钥):
- 这是微信支付接口的核心密钥,用于签名和验签,请务必妥善保管,不要泄露。
- 进入 账户中心 -> API 安全。
- 你会看到两种密钥:APIv2 密钥 和 APIv3 密钥。
- 强烈建议使用 APIv3 密钥,因为它更安全,请点击“设置”或“重置”,设置一个复杂的密钥并保存下来。注意:密钥只显示一次,请立即复制并安全保存。
-
获取商户号 (Mch ID):
(图片来源网络,侵删)- 同样在 账户中心 -> 基本资料 中,可以找到你的 商户号,这是一个以
1或8开头的 16 位数字。
- 同样在 账户中心 -> 基本资料 中,可以找到你的 商户号,这是一个以
-
获取 AppID / AppSecret:
- 如果你需要使用 JSAPI 支付(微信内H5支付),你需要一个 公众号 或 小程序。
- 登录 微信公众平台,在“开发” -> “基本配置”中找到你的 AppID 和 AppSecret。
- 如果你的网站没有公众号,只做扫码支付,这一步可以暂时忽略。
你需要准备的核心信息:
- 商户号
- APIv3 密钥 (强烈推荐)
- AppID (如果使用JSAPI支付)
- APIv2 密钥 (如果你的插件只支持v2)
第二步:选择并下载支付插件
DedeCMS 的插件市场非常丰富,有很多成熟的微信支付插件可以选择,选择时注意:
- 更新时间:选择最近还在维护和更新的插件。
- 评价和销量:选择用户评价好、使用广泛的插件。
- 文档支持:选择有详细安装和使用说明的插件。
推荐的插件类型:

- DedeCMS 微信扫码支付插件:这是最常见的,搜索关键词“微信支付”、“扫码支付”可以找到很多。
- DedeCMS 统一支付插件:有些插件集成了微信支付、支付宝支付等多种方式,更灵活。
操作步骤:
- 访问 DedeCMS 官方论坛或知名的 DedeCMS 插件下载站(如 dedecms8.com、织梦吧等)。
- 搜索“微信支付”或“扫码支付”,选择一个你满意的插件下载。
- 下载的文件通常是一个压缩包(.zip),里面包含了插件文件和安装说明。
第三步:安装与配置插件
以一个典型的微信扫码支付插件为例,安装过程如下:
-
上传文件:
- 通过 FTP 工具连接到你的服务器。
- 解压下载的插件压缩包。
- 将解压后的文件夹(通常是
pay或类似名称)上传到你的 DedeCMS 网站根目录下的/include/文件夹中。
-
安装插件:
- 登录你的 DedeCMS 后台。
- 进入 “系统” -> “软件频道” -> “插件管理”。
- 在插件管理页面,你应该能看到刚刚上传的插件,点击“安装”按钮。
- 按照提示完成安装,系统可能会自动创建数据表。
-
配置插件(最关键的一步):
-
安装成功后,在后台的菜单中会出现一个新的支付管理入口,“微信支付” 或 “支付中心”。
-
点击进入配置页面,在这里你需要填入第一步中准备好的微信商户信息。
-
常规配置:
- 支付接口版本:选择
APIv3(如果插件支持)。 - 商户号:填写你的 16 位商户号。
- API密钥:填写你设置的 APIv3 密钥。
- AppID:填写你的公众号或小程序的 AppID。
- 支付成功通知 URL:这是一个非常重要的配置,它告诉微信支付服务器,当用户支付成功后,应该访问你网站上的哪个页面来处理结果,这个页面必须是外网可以访问的。
http://www.yourdomain.com/notify.php,你需要将这个 URL 在微信商户平台的 产品中心 -> 开发配置 -> 支付配置 中也配置上,并启用它。 - 异步通知页面:与支付成功通知 URL 类似,是处理支付结果的核心逻辑文件。
- 支付成功显示页面:用户支付成功后跳转的页面,例如订单详情页。
- 支付失败显示页面:用户支付失败后跳转的页面。
- 支付接口版本:选择
-
保存配置:填写完所有信息后,务必点击“保存”或“提交”按钮。
-
第四步:调用支付接口(修改模板)
你需要在前台模板中,将“支付”按钮与插件关联起来,这通常涉及到修改 DedeCMS 的模型模板或自定义页面。
假设你要在一个文章的购买页面上添加支付按钮。
-
找到模板文件:
- 进入 “模板” -> “模板管理”,找到你正在使用的文章详情页模板(通常是
article_article.htm)。
- 进入 “模板” -> “模板管理”,找到你正在使用的文章详情页模板(通常是
-
添加支付按钮和逻辑:
-
在模板中你希望显示支付按钮的位置,添加如下代码,这里的
order_id和money是动态的,你需要根据你的业务逻辑来获取。 -
使用插件提供的标签或函数(推荐,最安全) 很多插件会提供自定义的标签或 PHP 函数来生成支付按钮,你需要查阅插件的官方文档,它可能提供一个
{dede:pay/}标签,或者你需要调用一个 PHP 函数。 -
手动调用(需要一定的 PHP 基础) 如果插件没有提供便捷标签,你可能需要手动调用,这通常需要你修改一个 PHP 文件(如
arc.archives.class.php显示前生成支付订单信息,然后将这些信息传递给模板。示例模板代码 (
article_article.htm):{dede:field.body/} <!-- 假设你已经通过PHP代码将订单信息传递给了模板 --> {if $pay_info} <div class="pay-box"> <h3>订单支付</h3> <p>订单号:{$pay_info.order_no}</p> <p>支付金额:¥{$pay_info.money}</p> <div id="qrcode-container"></div> <button onclick="location.href='{$pay_info.pay_url}'">立即支付</button> </div> <!-- 引入 jQuery 和 QRCode.js 库来生成二维码 --> <script src="https://cdn.staticfile.org/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdn.staticfile.org/qrcodejs/1.0.0/qrcode.min.js"></script> <script> // 当页面加载完成后,生成支付二维码 $(document).ready(function() { // {dede:php}echo $pay_info['qrcode_url'];{/dede:php} 是通过PHP代码生成的支付二维码URL var qrcodeUrl = "{dede:php}echo $pay_info['qrcode_url'];{/dede:php}"; if (qrcodeUrl) { new QRCode(document.getElementById("qrcode-container"), { text: qrcodeUrl, width: 200, height: 200 }); } }); </script> {/if}对应的 PHP 逻辑(通常在
arc.archives.class.php的ParseTemplets()函数之前添加):// 在需要生成支付订单的地方(比如文章内容显示前) if ($this->Fields['need_pay'] == 1) { // 假设你有一个自定义字段 need_pay 来判断是否需要支付 require_once(DEDEINC . '/pay/wechatpay.class.php'); // 引入支付类文件,路径根据你的插件实际情况修改 $pay = new WechatPay(); // 实例化支付类 $order_id = 'DD' . date('YmdHis') . mt_rand(1000, 9999); // 生成唯一订单号 $money = $this->Fields['price']; // 假设价格存在 price 字段 // 调用插件创建订单的方法,这个方法名和参数需要参考插件文档 $pay_result = $pay->createOrder($order_id, $money); if ($pay_result['status'] == 'success') { // 将支付信息传递给模板 $this->Fields['pay_info'] = $pay_result['data']; } else { // 支付创建失败,显示错误信息 $this->Fields['pay_info'] = null; ShowMsg($pay_result['msg'], '-1'); exit(); } }
-
第五步:处理支付结果(回调)
当用户在微信中扫码支付成功后,微信服务器会立即向你之前配置的 异步通知 URL(/notify.php)发送一个 POST 请求。
你需要在这个 notify.php 文件中编写代码来:
- 接收并验证通知:使用商户密钥对微信发送的通知进行签名验证,确保通知是真实有效的,防止伪造。
- 更新订单状态:验证通过后,根据订单号 (
out_trade_no) 在你的数据库中找到对应的订单,将其状态从“待支付”更新为“已支付”。 - 返回成功响应:向微信服务器返回一个特定的 XML 格式响应,告知微信服务器“我已成功处理通知”,微信服务器收到后会停止重复发送通知。
notify.php 文件示例框架:
<?php
// 引入必要的文件,如数据库配置、支付类等
require_once(dirname(__FILE__) . "/../include/config_global.php");
require_once(DEDEINC . '/pay/wechatpay.class.php');
// 获取微信服务器发送的数据
$xml = file_get_contents('php://input');
$notifyData = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
// 实例化支付类,用于验签
$pay = new WechatPay();
// 验证签名
if (!$pay->verifyNotify($notifyData)) {
// 验签失败,记录日志
file_put_contents('notify_error.log', date('Y-m-d H:i:s') . " - 验签失败: " . $xml . "\n", FILE_APPEND);
// 向微信返回失败
$response = '<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[验签失败]]></return_msg></xml>';
echo $response;
exit();
}
// 验签成功,处理业务逻辑
$outTradeNo = (string)$notifyData->out_trade_no; // 商户订单号
$transactionId = (string)$notifyData->transaction_id; // 微信支付订单号
$totalFee = (int)$notifyData->total_fee; // 支付金额,单位:分
// 1. 根据商户订单号查询你的订单
$dsql = new DedeSql(false);
$dsql->SetQuery("SELECT * FROM `#@__orders` WHERE `order_id` = '$outTradeNo'");
$dsql->Execute('one');
$order = $dsql->GetArray('one');
$dsql->Close();
// 2. 检查订单状态,避免重复处理
if ($order['status'] == 1) { // 假设 1 是已支付状态
// 已经处理过,直接返回成功
$response = '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
echo $response;
exit();
}
// 3. 检查支付金额是否一致
if ($order['money'] * 100 != $totalFee) {
file_put_contents('notify_error.log', date('Y-m-d H:i:s') . " - 金额不一致: 订单{$outTradeNo}\n", FILE_APPEND);
$response = '<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[金额不一致]]></return_msg></xml>';
echo $response;
exit();
}
// 4. 更新订单状态
$dsql->ExecuteNoneQuery("UPDATE `#@__orders` SET `status` = 1, `pay_time` = '" . time() . "', `transaction_id` = '$transactionId' WHERE `order_id` = '$outTradeNo'");
// 5. 可以在这里触发其他业务逻辑,比如给用户增加积分、开通会员等
// ...
// 6. 向微信服务器返回成功
$response = '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
echo $response;
exit();
?>
总结与注意事项
- 安全第一:API 密钥是生命线,切勿泄露,所有涉及金额的操作,前后端都要做严格校验。
- 异步通知是核心:务必正确实现异步通知处理逻辑,这是保证订单状态准确的关键。
- 测试环境:微信商户平台提供了沙箱环境,强烈建议先在沙箱环境下完成所有开发和测试,确认无误后再切换到生产环境。
- 日志记录:在支付流程的关键节点(如创建订单、接收通知、更新订单)都做好日志记录,方便排查问题。
- 插件文档:每个插件的用法可能略有不同,务必仔细阅读你所使用的插件的官方文档,这是最准确的信息来源。
通过以上步骤,你就可以成功地为你的 DedeCMS 网站集成微信支付功能了,如果在某个环节遇到问题,可以结合插件文档和服务器日志进行排查。
