菜鸟科技网

dede支付怎么做?配置步骤有哪些?

核心流程概述

  1. 创建订单:用户在你的网站上选择商品,点击“去结算”或“提交订单”,网站生成一个唯一的订单号,并将订单信息(金额、商品、用户等)存入数据库的 dede_addonshop 或自定义的订单表。
  2. 跳转支付:用户点击“立即支付”,网站后台根据你配置的支付方式(如支付宝),调用相应的接口,生成一个支付请求(通常是包含参数的URL或表单)。
  3. 用户支付:用户被重定向到支付宝或微信支付的官方页面,完成扫码或输入密码付款。
  4. 支付回调:用户支付成功后,支付宝/微信支付服务器会主动向你的网站服务器发送一个“异步通知”(Webhook),这是最关键的一步,用于保证支付结果的可靠性。
  5. 处理通知:你的网站接收到通知后,会验证通知的真实性,然后更新数据库中对应订单的状态(从“待支付”改为“已支付”)。
  6. 显示结果:网站根据订单状态的更新,给用户显示“支付成功”的页面,并触发后续流程(如发货、发送邮件通知等)。

准备工作

在开始之前,你需要准备好以下东西:

dede支付怎么做?配置步骤有哪些?-图1
(图片来源网络,侵删)
  1. 一个可以正常访问的 DedeCMS 网站:建议在本地测试成功后,再部署到服务器。
  2. 注册第三方支付平台账号
  3. 申请应用并获取配置信息
    • 支付宝:登录支付宝商家中心,创建一个“网页应用”或“移动应用”,获取 APPID,在“接口加密方式”中申请 应用私钥 和下载 支付宝公钥
    • 微信支付:登录微信支付商户平台,在“产品中心”申请一个“Native支付”产品,获取 商户号,在“账户中心” > “API安全”中设置 API密钥
  4. 一个拥有公网 IP 的服务器:支付平台的回调通知需要能访问到你的服务器,本地测试可以使用内网穿透工具(如 ngrok)。

实现方式

主要有两种实现方式:

  • 使用成熟的 DedeCMS 支付插件(推荐)

    • 优点:简单、快速、稳定,通常已经处理好了各种细节(如签名验证、异常处理)。
    • 缺点:功能可能比较固定,有潜在的安全风险(如果插件来源不明)。
  • 使用官方 SDK 进行二次开发

    • 优点:灵活可控,安全性高,可以完全按照自己的业务逻辑定制。
    • 缺点:开发周期长,需要具备一定的 PHP 编程能力。

下面我将分别详细介绍这两种方式。

dede支付怎么做?配置步骤有哪些?-图2
(图片来源网络,侵删)

使用 DedeCMS 支付插件(以支付宝为例)

这是最简单快捷的方法。

  1. 寻找插件

    • 访问 DedeCMS 的官方论坛、插件市场或一些知名的 DedeCMS 资源网站。
    • 搜索关键词如 “DedeCMS 支付宝插件”、“DedeCMS 微信支付插件”。
    • 选择一个下载量高、评价好的插件。注意:务必从可信来源下载,以防后门。
  2. 安装插件

    • 解压下载的插件包。
    • 按照插件的说明文档,通常需要将文件上传到 DedeCMS 的 plus/ 目录或指定目录。
    • 登录 DedeCMS 后台,在“模块” -> “模块管理”中找到插件,点击“安装”。
  3. 配置插件

    • 在后台找到已安装的支付模块,进入配置页面。
    • 将你准备好的支付宝 APPID应用私钥支付宝公钥 等信息填写到对应的配置项中。
    • 设置 异步通知地址:这个地址非常重要,必须是你的网站上一个可以公开访问的 PHP 文件。http://www.yourdomain.com/plus/alipay/notify_url.php,插件通常会自动生成这个文件。
    • 设置 同步跳转地址:支付成功后用户会跳转到的页面,http://www.yourdomain.com/plus/alipay/return_url.php
  4. 在前台调用

    • 打开你的订单确认页面(通常是 archives_shop.php 或你自定义的模板文件)。
    • 找到“立即支付”的按钮或链接。
    • 修改其 href 属性,指向支付插件的处理页面,并带上订单 ID 参数。
      <a href="/plus/alipay/pay.php?order_sn=<?php echo $ordersn; ?>">立即支付</a>
    • 当用户点击这个链接时,就会触发插件流程,跳转到支付宝支付页面。

使用官方 SDK 进行二次开发(以支付宝为例)

这种方式更灵活,适合有一定开发能力的用户。

  1. 下载官方 SDK

    • 访问支付宝开放平台:https://opendocs.alipay.com/
    • 在“开发中心” -> “SDK下载”中,找到“PHP”版本的 SDK 并下载。
  2. 集成 SDK 到你的项目

    • 将下载的 SDK 压缩包解压,把其中的 AopSdk.phplib 目录上传到你的 DedeCMS 网站根目录下的一个安全位置,/alipay_sdk/
  3. 创建支付请求页面 (pay.php)

    • 在你的网站根目录下创建一个新文件,/alipay/pay.php
    • 编写 PHP 代码,调用 SDK 生成支付链接或表单。
    <?php
    // 引入 SDK
    require_once '../alipay_sdk/AopSdk.php';
    // 1. 获取订单信息
    // 假设订单号是通过 URL 参数传递的,你需要从数据库中查询这个订单的详细信息
    $order_sn = $_GET['order_sn']; // '20251027123456'
    // 这里你需要连接你的数据库,查询订单金额等
    // 伪代码:
    // $order_info = $dsql->GetOne("SELECT * FROM `#@__addonshop` WHERE ordersn='$order_sn'");
    // if (!$order_info) {
    //     die('订单不存在');
    // }
    // $total_amount = $order_info['price']; // 订单金额
    // 为了演示,我们直接写死一个金额
    $total_amount = '0.01'; // 单位:元
    // 2. 配置参数
    $config = array(
        'app_id' => '你的APPID',
        'merchant_private_key' => '你的应用私钥',
        'notify_url' => 'http://www.yourdomain.com/alipay/notify.php', // 异步通知地址
        'return_url' => 'http://www.yourdomain.com/alipay/return.php',  // 同步跳转地址
        'alipay_public_key' => '你的支付宝公钥'
    );
    // 3. 创建请求参数
    $aop = new \AopClient();
    $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
    $aop->appId = $config['app_id'];
    $aop->rsaPrivateKey = $config['merchant_private_key'];
    $aop->format = 'json';
    $aop->charset = 'UTF-8';
    $aop->signType = 'RSA2';
    $aop->alipayPublicKey = $config['alipay_public_key'];
    $request = new \AlipayTradePagePayRequest();
    $request->setReturnUrl($config['return_url']);
    $request->setNotifyUrl($config['notify_url']);
    // 设置业务参数
    $bizContent = json_encode([
        "out_trade_no" => $order_sn, // 你的网站订单号
        "product_code" => "FAST_INSTANT_TRADE_PAY",
        "total_amount" => $total_amount,
        "subject" => "DedeCMS订单支付", // 订单名称
        "body" => "订单号:".$order_sn, // 订单描述
    ]);
    $request->setBizContent($bizContent);
    // 4. 发起请求
    $response = $aop->pageExecute($request, 'GET');
    // 5. 输出支付表单
    echo $response;
    ?>
  4. 创建异步通知处理页面 (notify.php)

    • 这个页面是支付成功后支付宝服务器会调用的,用户不会看到。
    • 它的核心任务是验证通知的真实性,然后更新订单状态
    <?php
    require_once '../alipay_sdk/AopSdk.php';
    $config = array(
        'app_id' => '你的APPID',
        'merchant_private_key' => '你的应用私钥',
        'notify_url' => 'http://www.yourdomain.com/alipay/notify.php',
        'return_url' => 'http://www.yourdomain.com/alipay/return.php',
        'alipay_public_key' => '你的支付宝公钥'
    );
    $aop = new \AopClient();
    $aop->alipayPublicKey = $config['alipay_public_key'];
    // 获取POST过来的数据
    $post_data = $_POST;
    // 验证签名
    $result = $aop->rsaCheckV1($post_data, null, 'RSA2');
    if ($result) {
        // 验证成功,处理业务逻辑
        $out_trade_no = $post_data['out_trade_no']; // 你的网站订单号
        $trade_no = $post_data['trade_no'];         // 支付宝交易号
        $trade_status = $post_data['trade_status']; // 交易状态
        // 只处理 TRADE_SUCCESS 或 TRADE_FINISHED 状态
        if ($trade_status == 'TRADE_SUCCESS' || $trade_status == 'TRADE_FINISHED') {
            // 1. 查询订单,防止重复处理
            // $order_info = $dsql->GetOne("SELECT * FROM `#@__addonshop` WHERE ordersn='$out_trade_no'");
            // if ($order_info && $order_info['paystatus'] == 0) { // 0代表未支付
                // 2. 更新订单状态为已支付
                // $dsql->ExecuteNoneQuery("UPDATE `#@__addonshop` SET paystatus=1, tradeno='$trade_no' WHERE ordersn='$out_trade_no'");
                // 3. 这里可以添加其他业务逻辑,
                //    - 发送订单确认邮件/短信
                //    - 自动发货(如果是虚拟商品)
                //    - 增加用户积分等
                echo 'success'; // 必须输出 success,支付宝才会认为通知成功
            // }
        }
    } else {
        // 验证失败
        echo 'fail';
    }
    ?>
  5. 创建同步跳转页面 (return.php)

    • 用户支付成功后,会被重定向到这个页面。
    • 注意:这个页面的信息仅供参考,最终的支付结果应以异步通知为准,因为用户可能关闭浏览器或网络问题导致异步通知失败。
    <?php
    // 同样需要验证,但不可靠
    // 为了安全,这里最好只是提示用户支付成功,然后让他去“我的订单”页面查看最终状态。
    // 获取订单号
    $out_trade_no = $_GET['out_trade_no'];
    // 可以在这里做一个简单的查询,并显示给用户
    // echo "您的订单({$out_trade_no})支付成功,正在跳转...";
    // 然后跳转到订单列表页
    header("Location: /member/order_list.php");
    exit;
    ?>

总结与建议

特性 插件 SDK
上手难度 ,配置即可 ,需要编程
开发速度
灵活性 ,受限于插件功能 ,完全自定义
安全性 取决于插件来源 ,可控性强
适用人群 普通站长、非技术人员 开发者、有定制需求的用户

给你的建议:

  • 如果你只是想快速让网站支持支付功能,并且对插件来源有信心,强烈推荐使用方式一
  • 如果你对支付流程有特殊要求,或者对安全性要求极高,并且有开发人员,选择方式二,使用官方 SDK 是最稳妥、最灵活的方案。

无论选择哪种方式,异步通知 (notify_url.php) 的处理都是整个支付流程中最核心、最关键的一环,务必保证其逻辑的正确性和健壮性。

分享:
扫描分享到社交APP
上一篇
下一篇