仰望星辰工作室

better-staridc-MNBT

better-staridc-MNBT/ app_plugins/epay/lib/Epay_Core.php 2.2 KB · 72 行 原始文件
Z zfhsh first commit 2 天前
1<?php
2/**
3 * 易支付 SDK(彩虹易支付协议,MD5 签名)
4 *
5 * V1.81 P3:从原 MPHX/lib/submit.class.php、notify.class.php、
6 * core.function.php、md5.function.php 合并而来,仅保留易支付所需的最小集合。
7 *
8 * 仅本插件内部使用,不污染全局命名空间(类名加 Epay 前缀)。
9 */
10
11if (!defined('IN_CRONLITE')) {
12 exit;
13}
14
15class Epay_Core
16{
17 /** 生成签名:把参数按 key 升序拼接成 a=1&b=2,末尾拼上 key,做 md5 */
18 public static function buildSign(array $params, $key)
19 {
20 // 去掉 sign / sign_type / 空值
21 $filtered = [];
22 foreach ($params as $k => $v) {
23 if ($k === 'sign' || $k === 'sign_type' || $v === '') {
24 continue;
25 }
26 $filtered[$k] = $v;
27 }
28 ksort($filtered);
29 reset($filtered);
30 $prestr = '';
31 foreach ($filtered as $k => $v) {
32 $prestr .= $k . '=' . $v . '&';
33 }
34 $prestr = substr($prestr, 0, -1);
35 return md5($prestr . $key);
36 }
37
38 /** 验证签名 */
39 public static function verifySign(array $params, $key, $sign)
40 {
41 $expected = self::buildSign($params, $key);
42 return $expected !== '' && $expected === $sign;
43 }
44
45 /**
46 * 构造提交表单 HTML。
47 *
48 * @param string $apiurl 易支付接口地址(如 https://pay.example.com/)
49 * @param string $pid 商户 ID
50 * @param string $key 商户密钥
51 * @param array $params 业务参数(type/out_trade_no/notify_url/return_url/name/money 等)
52 * @return string 自动提交的 HTML 表单
53 */
54 public static function buildForm($apiurl, $pid, $key, array $params)
55 {
56 $params['pid'] = $pid;
57 $sign = self::buildSign($params, $key);
58 $params['sign'] = $sign;
59 $params['sign_type'] = 'MD5';
60
61 $apiurl = rtrim((string)$apiurl, '/') . '/';
62 $gateway = $apiurl . 'submit.php?';
63
64 $html = "<form id='epaysubmit' name='epaysubmit' action='" . htmlspecialchars($gateway, ENT_QUOTES, 'UTF-8') . "' method='POST'>";
65 foreach ($params as $k => $v) {
66 $html .= "<input type='hidden' name='" . htmlspecialchars($k, ENT_QUOTES, 'UTF-8') . "' value='" . htmlspecialchars($v, ENT_QUOTES, 'UTF-8') . "'/>";
67 }
68 $html .= "<input type='submit' value='正在跳转'></form>";
69 $html .= "<script>document.forms['epaysubmit'].submit();</script>";
70 return $html;
71 }
72}