EMLOG

cover

支付SDK 功能扩展

通用的支付插件,方便开发者对接支付平台:支付宝支付、虎皮椒支付


售价:免费



开发者:emlog

上次更新: 1周前


无代码加密 无额外授权 版本号:1.3.5 适配PHP:56,74,81

支付SDK

通用的支付插件,方便对接支付平台,目前只支持支付宝支付、虎皮椒支付、易支付。

🚨该插件需要配合其他应用主题或者插件来实现下单购买的功能,仅仅安装该插件没任何意义

支付宝

签约开通支付宝当面付

  • 注册并登录支付宝开放平台,完成个人或者企业认证
  • 申请开通支付宝当面付:按照提示完成当面付产品的签约(当面付个人认证用户提供办公场所照片也可以完成申请)。
  • 创建一个网页移动应用,得到 APPID
  • 进入应用开发设置:应用的加密方式为:密钥方式,最终会得到:应用私钥支付宝公钥
  • 进入应用开发设置:填写应用网关和授权回调地址,具体地址由使用该SDK的应用提供。

设置本插件

  • 进入插件设置页面:填写上一步得到的APPID应用私钥支付宝公钥
  • 设置完成即可,返回具体应用检查是否能唤起支付。

发起当面付,获得支付二维码

代码对接部分针对应用开发者,普通用户请忽略

<?php 
$sku_id = Input::postIntVar('sku_id');
$sku_name = 'xxxxx';
$pay_type = 'alipay';
$pay_notify_url = BLOG_URL . 'user/order_callback';

$sku_info = $Log_Model->getDetail($sku_id);
$price = $sku_info['fields']['price'];

if ($price <= 0) {
    Output::error('价格错误', 200);
}

$Order_Model = new Order_Model('appname');
$order_id = $Order_Model->createOrder(UID, $pay_type, $sku_name, $sku_id, $price);

$paySdk = EmAliPaySdk::getInstance();
$response = $paySdk->createFaceToFacePayment($order_id, $price, '购买付费资源', $pay_notify_url);
if ($response['success']) {
    $qrCode = $response['qr_code'];
    Output::ok(['qrcode_url' => "https://api.qrserver.com/v1/create-qr-code/?data={$qrCode}", 'order_id' => $order_id, 'sku_id' => $sku_id], 200);
} else {
    Output::error($response['message'], 200);
}

发起网页支付 (需要签约支付宝网页支付)

<?php 
$sku_id = Input::postIntVar('sku_id');
$sku_name = 'xxxxx';
$pay_type = 'alipay';
$return_url= BLOG_URL . '?post=' . $sku_id;

$sku_info = $Log_Model->getDetail($sku_id);
$price = $sku_info['fields']['price'];

if ($price <= 0) {
    Output::error('价格错误', 200);
}

$Order_Model = new Order_Model('appname');
$order_id = $Order_Model->createOrder(UID, $pay_type, $sku_name, $sku_id, $price);

$paySdk = EmAliPaySdk::getInstance();
$paySdk->createWebPayment($order_id, $price, $return_url);

支付回调

<?php 
$request = $_POST;
header('Content-Type: application/json');
if (empty($request)) {
    Output::error('参数错误', 200);
}
$paySdk = EmAliPaySdk::getInstance();
$result = $paySdk->handleFaceToFaceCallback($request);
if ($result) {
    $out_trade_no = isset($request['out_trade_no']) ? $request['out_trade_no'] : '';
    $Order_Model = new Order_Model('appname');
    $data = [
        'order_id' => $out_trade_no,
        'pay_price' => $result['total_amount'],
        'out_trade_no' => $result['trade_no'],
        'update_time' => time(),
    ];
    $Order_Model->updateOrder($out_trade_no, $data);
    Output::ok('success', 200);
} else {
    Output::error('fail', 200);
}

易支付

易支付是一套支付框架,基于这套框架可以搭建属于自己的易支付平台。市面上也有很多易支付平台,请仔细甄别,避免资金损失。

1、下单接口

$sku_id = Input::postIntVar('sku_id');
$sku_name = Input::postStrVar('sku_name');
$pay_type = Input::postStrVar('pay_type', 'alipay');
$pay_notify_url = BLOG_URL . 'user/order_callback'; // 支付成功后,易支付会回调该地址
$pay_return_url = BLOG_URL . 'user/order'; // 支付成功后跳转的页面

// 获取商品价格
$sku_info = $Log_Model->getDetail($sku_id);
$price = $sku_info['fields']['price'];

// 创建订单
$Order_Model = new Order_Model('wind-max');
$order_id = $Order_Model->createOrder(UID, $pay_type, $sku_name, $sku_id, $price);

$easyPay = EmEasyPaySdk::getInstance();
$result = $easyPay->createPageJumpPayment($order_id, $price, $sku_title, $pay_notify_url, $pay_return_url);

if ($result['success'] && isset($result['gateway_url'])) {
    Output::ok(['gateway_url' => $result['gateway_url'], 'order_id' => $result['order_id'], 'params' => $result['params']], 200);
} else {
    Output::error(isset($result['message']) ? $result['message'] : '易支付创建失败', 200);
}

2、 前台js请求下单接口

前台js请求下单接口,利用下单接口返回的数据,构建form表单直接post提交跳转到支付页面,演示js代码如下:

// 支付按钮
<form id="payment-form-easypay" action="order_pay" method="post" class="space-y-4">
    <input type="hidden" id="sku_id" name="sku_id" value="<?= $sku_id ?>">
    <input type="hidden" id="sku_name" name="sku_name" value="<?= $sku_name ?>">
    <button type="submit" class="py-2 px-4 bg-green-600 hover:bg-green-700 focus:ring-green-500 focus:ring-offset-green-200 text-white w-full transition ease-in duration-200 text-center text-base font-semibold shadow-md focus:outline-none focus:ring-2 focus:ring-offset-2 rounded-lg flex items-center justify-center space-x-2">
        <span>去支付</span>
    </button>
</form>

// ajax请求下单接口
$('#payment-form-easypay').on('submit', function(e) {
    e.preventDefault();
    const formData = $(this).serialize();

    $.ajax({
        url: $(this).attr('action'),
        type: 'POST',
        data: formData,
        success: function(response) {
            if (response.code === 0) {
                generateAndSubmitPaymentForm(response.data.gateway_url, response.data.params);
            }
        },
        error: function() {
            cocoMessage.error('发起支付失败,请检查网络连接或稍后再试', 4000)
            closeModalWindow();
        }
    });
});

/**
 * 生成支付表单并自动提交,跳转到易支付平台,完成支付后跳转回返回页面
 */
function generateAndSubmitPaymentForm(gateway, params) {
    // 创建表单元素
    var form = document.createElement('form');
    form.id = 'dynamicPaymentForm';
    form.method = 'post';
    form.action = gateway;
    form.style.display = 'none';

    // 添加隐藏字段
    for (var key in params) {
        if (params.hasOwnProperty(key)) {
            var input = document.createElement('input');
            input.type = 'hidden';
            input.name = key;
            input.value = params[key];
            form.appendChild(input);
        }
    }

    // 将表单添加到页面并提交
    document.body.appendChild(form);
    form.submit();

    // 提交后移除表单
    setTimeout(function() {
        if (document.body.contains(form)) {
            document.body.removeChild(form);
        }
    }, 100);
}

3、支付成功异步通知回调

$request = $_GET;
if (empty($request)) {
    Output::error('参数错误', 200);
}
// 处理易支付回调
$easyPaySdk = EmEasyPaySdk::getInstance();
$result = $easyPaySdk->handleNotify($request);

if ($result) {
    $out_trade_no = $result['order_id'];
    $Order_Model = new Order_Model('wind-max');
    $data = [
        'order_id' => $out_trade_no,
        'pay_price' => $result['total_amount'],
        'out_trade_no' => $result['trade_no'],
        'update_time' => time(),
    ];
    $r = $Order_Model->updateOrder($out_trade_no, $data);
    // 易支付回调需要返回success
    echo 'success';
    exit;
} else {
    echo 'fail';
    exit;
}

虎皮椒支付

虎皮椒支付是一个个人支付接口平台,支持微信和支付宝收款。

支付方式:

  • 跳转网页支付:用户点击支付链接跳转到虎皮椒支付页面完成支付
  • 二维码扫码支付:生成支付二维码,用户扫码完成支付(本地二维码支付模式)

申请虎皮椒支付

  1. 注册并登录 虎皮椒支付平台
  2. 完成实名认证和商户认证
  3. 创建应用,获得 APPIDAPPSECRET
  4. 配置支付网关地址(默认为官方网关)
  5. 设置异步通知地址和同步跳转地址

设置本插件

  • 进入插件设置页面,切换到"虎皮椒支付"选项卡
  • 填写从虎皮椒平台获得的APPIDAPPSECRET
  • 确认网关地址(通常使用默认值即可)
  • 设置完成即可,返回具体应用检查是否能正常支付

开发对接虎皮椒支付

对接部分针对应用开发者,普通用户忽略

发起虎皮椒支付

<?php 
$sku_id = Input::postIntVar('sku_id');
$sku_name = 'xxxxx';
$pay_type = 'xunhu';
$notify_url = BLOG_URL . 'user/order_callback';
$return_url = BLOG_URL . '?post=' . $sku_id;

$sku_info = $Log_Model->getDetail($sku_id);
$price = $sku_info['fields']['price'];

if ($price <= 0) {
    Output::error('价格错误', 200);
}

$Order_Model = new Order_Model('appname');
$order_id = $Order_Model->createOrder(UID, $pay_type, $sku_name, $sku_id, $price);

$paySdk = EmXunhuPaySdk::getInstance();
$response = $paySdk->createPayment($order_id, $price, $sku_name, $notify_url, $return_url);
if ($response['success']) {
    // 支持两种支付方式:网页跳转和二维码支付
     echo "支付创建成功!<br>";
     echo "订单号:" . $response['order_id'] . "<br>";
     echo "支付链接:<a href='" . $response['pay_url'] . "' target='_blank'>点击支付</a><br>";

     // 如果有二维码地址,显示二维码支付选项
     if (!empty($response['qrcode_url'])) {
         echo "二维码支付:<br>";
         echo "<img src='" . $response['qrcode_url'] . "' alt='支付二维码' style='width:200px;height:200px;'><br>";
         echo "扫描上方二维码完成支付<br>";
     }
} else {
    Output::error($response['message'], 200);
}

返回结果:

  • success: 是否成功
  • order_id: 订单号
  • pay_url: 支付链接(跳转网页支付)
  • qrcode_url: 二维码支付地址(可选,用于生成二维码支付)

虎皮椒支付回调

<?php 
$request = $_POST;
header('Content-Type: text/plain');
if (empty($request)) {
    echo 'fail';
    exit;
}

$paySdk = EmXunhuPaySdk::getInstance();
$result = $paySdk->handleNotify($request);
if ($result) {
    $out_trade_no = isset($request['trade_order_id']) ? $request['trade_order_id'] : '';
    $Order_Model = new Order_Model('appname');
    $data = [
        'order_id' => $out_trade_no,
        'pay_price' => $result['total_fee'],
        'out_trade_no' => $result['order_id'],
        'update_time' => time(),
    ];
    $Order_Model->updateOrder($out_trade_no, $data);
    echo 'success';
} else {
    echo 'fail';
}
请先登录, 再发布评论

阿六哥哥

铁杆 2025-08-11 14:30:10

希望后续接入微信支付~


阿浩@魅影

友情 2025-02-22 23:30:26

使用sdk,延迟有5到12秒


揽月听风

铁杆 2025-01-08 15:03:04

实际开发中存在如下问题,返回的是对象 需要修改为对象,否则会报错

avatar

emlog 开发者

新版已修复,可以更新试试


阿浩@魅影

友情 2024-12-22 13:10:48

错误代码 missing-signature 错误原因: 缺少签名参数
这怎么整

avatar

emlog 开发者

加我QQ吧,点我名字进去有QQ


健仔按快门

铁杆 2024-10-11 15:30:17

回调地址怎么填

avatar

emlog 开发者

加我QQ吧,点我名字进去有QQ


不知名的牛马

铁杆 2024-06-12 17:53:22

填加个易支付吧!支付宝都被清退了!

avatar

emlog 开发者

感谢反馈,下个版本考虑下


星辰散人

铁杆 2024-04-05 17:24:09

是直接在里面填入文件内容还是文件路径?

avatar

emlog 开发者

配置支付信息即可