Files
2026-03-15 01:27:05 +08:00

345 lines
8.1 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/// https://api.tscce.cn/sample/onlinepay/test.php
define('USEDCHARSET', 'utf-8');
/// 这里定义公共变量
$app_id = '14992192722868'; /// appid
$dev_key = '14915485974028'; /// 开发者key
$market_key = '0000'; /// 门店key
$sign_key = '0000'; /// 签名key(暂时支付时不校验签名, 但是退款时将校验这个签名)
/// 接口返回用的信息类
class ResultObject
{
public $error; /// 返回值: 0成功; 非0失败;
public $error_code; /// 错误号
public $msg; /// 错误信息
public $data; /// 返回的数据
public function ResultObject($string)
{
$this->error = 0;
$this->error_code = 0;
$this->msg = null;
$this->data = null;
$this->from_string($string);
}
public function to_array()
{
return (array)$this;
}
public function to_string()
{
return json_encode($this, JSON_UNESCAPED_UNICODE);
}
public function from_array($array)
{
foreach ($array as $key => $value)
{
if (property_exists($this, $key))
{
$this->$key = $value;
}
}
return true;
}
public function from_string($string)
{
return $this->from_array((array)json_decode($string));
}
}
/**
* @note 获取当前页面的完整连接
* @return string
*/
function GetLocaleUrl()
{
$is_https =
(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ||
(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') ||
(isset($_SERVER['REQUEST_SCHEME']) && $_SERVER['REQUEST_SCHEME'] == 'https');
$request_scheme = $is_https ? 'https://' : 'http://';
$hostname = $_SERVER['SERVER_NAME'];
$hostport = (($is_https && '443' == $_SERVER['SERVER_PORT']) || (!$is_https && '80' == $_SERVER['SERVER_PORT'])) ? '' : ':' . intval($_SERVER['SERVER_PORT']);
return $request_scheme . $hostname . $hostport . $_SERVER['PHP_SELF'];
}
/**
* @date 2017-03-04
* @note 给参数按key的顺序排序。支持递归
* @param mixed $parameter 要排序的参数
* @return array
* @auth 应俊
*/
function SortParam($parameter)
{
$parameter = (array)$parameter;
foreach ($parameter as $k => $v)
{
if (is_array($v) || is_object($v))
{
$parameter[$k] = SortParam($v);
}
}
// 调用strcmp函数来排序该函数区分大小写。
uksort($parameter, 'strcmp');
return $parameter;
}
/**
* @date 2017-03-06
* @note 转换参数成字符串形式按key=value的形式用&分隔)。
* @param mixed $parameter 要转换的参数
* @return string
* @auth 应俊
*/
function ConvertParam($parameter)
{
$parameter = (array)$parameter;
$return = '';
foreach ($parameter as $k => $v)
{
if (is_array($v) || is_object($v))
{
$return .= sprintf('&%s={%s}', $k, ConvertParam($v));
}
else
{
$return .= sprintf('&%s=%s', $k, $v);
}
}
$sublen = mb_strlen('&', USEDCHARSET);
$retlen = mb_strlen($return, USEDCHARSET);
$return = mb_substr($return, $sublen, $retlen - $sublen, USEDCHARSET);
return $return;
}
/**
* @date 2017-03-04
* @note 为参数生成签名
* @param mixed $parameter 要签名的参数
* @param string $signkey 签名key
* @return string
* @auth 应俊
*/
function SignParameter($parameter, $signkey = '')
{
// 1先把参数按参数名key从小到大排序
$parameter = SortParam($parameter);
// 2连接参数成一个字符串按key=value的形式用&分隔)。
$return = ConvertParam($parameter);
// 3结尾加上key=签名key
$return .= '&key=' . $signkey;
// 4md5加密这个字符串
return md5($return);
}
/**
* @param mixed $data
* @return array|mixed
*/
function ChangePostData($data)
{
switch (gettype($data))
{
case 'array':
{
foreach ($data as $key => $value)
{
$data[$key] = ChangePostData($value);
}
break;
}
case 'object':
{
$array = (array)$data;
foreach ($array as $key => $value)
{
$data->$key = ChangePostData($value);
}
break;
}
default:
{
$data = preg_replace_callback('/\+/', function ($r) { return '%2B'; }, $data);
$data = preg_replace_callback('/\&/', function ($r) { return '%26'; }, $data);
break;
}
}
return $data;
}
/**
* @note 发送post请求
* @param string $url
* @param mixed $data
* @return string
*/
function SendPost($url, $data)
{
$data = http_build_query(ChangePostData($data));
$opts = array(
'http' => array(
'method' => 'POST',
'header' => "Content-type: application/x-www-form-urlencoded\r\n" . "Content-Length: " . strlen($data) . "\r\n",
'content' => $data,
),
);
$context = stream_context_create($opts);
$ret = file_get_contents($url, false, $context);
$ret = trim($ret, "\xEF\xBB\xBF");
return $ret;
}
$order_id = md5(time().rand(1000,9999));
$notice_url = dirname(getLocaleUrl()) . '/notice.php'; /// 通知页面地址
$return_url = dirname(getLocaleUrl()) . '/return.php'; /// 通知页面地址
/// 登录
$url = 'https://api.tscce.cn/api/login/ylnn';
$data = array(
'appid' => $app_id, /// appid
'devkey' => $dev_key, /// 开发者key
'market_key' => $market_key, /// 门店key
'scode' => md5(date('Ymdhis') . rand(1000, 9999)), /// 随机数
'agent_key' => 'i33v0llvp0euhd1n9qo1fM2RV8vtog4y', /// 代理号
'game_key' => '7N0e0z2u2098pf1M2fj0kyB1D4n4ylkA', /// 渠道号
'user_key' => '100000', /// 用户号
'headImg' => '', /// 头像
'nickname' => '100000', /// 昵称
);
$ret = SendPost($url, $data);
$ret = new ResultObject($ret);
if ($ret->error)
die($ret->msg);
$sid = $ret->data->sid;
$scode = $ret->data->scode;
$fee = 1;
$title = '支付测试';
$tdy_id = 1;
$tdy_token = 1;
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form style="display:none;" id="frm" name="frm" method="post" action="https://api.tscce.cn/api/newpay/pay/online/">
<input name="appid" type="text" value="<?php echo $app_id; ?>" />
<input name="devkey" type="text" value="<?php echo $dev_key; ?>" />
<input name="sid" type="text" value="<?php echo $sid; ?>" />
<input name="scode" type="text" value="<?php echo $scode; ?>" />
<input name="orderid" type="text" value="<?php echo $order_id; ?>" />
<input name="fee" type="text" value="1" />
<input name="title" type="text" value="支付测试" />
<input name="notice_url" type="text" value="<?php echo $notice_url; ?>" />
<input name="return_url" type="text" value="<?php echo $return_url; ?>" />
<input name="paytype" type="text" value="9"/>
<input name="p1" type="text" value="aaa"/>
<input name="p2" type="text" value="bbb"/>
<input name="version" type="text" value="1"/>
<input name="sign" type="text" value=""/>
</form>
<script>
frm.submit();
<?php
/*
$html = <<<EOL
var add_formchild = function (name, value) {
var edt = document.createElement('input');
edt.type = 'text';
edt.id = name;
edt.name = name;
edt.value = value;
frmPost.appendChild(edt);
};
function startpay() {
var frmPost = document.createElement('form');
frmPost.id = '____frmPost____';
frmPost.name = '____frmPost____';
frmPost.method = 'post';
frmPost.action = 'https://api.tscce.cn/api/newpay/pay/online/';
var add_formchild = function (name, value) {
var edt = document.createElement('input');
edt.type = 'text';
edt.id = name;
edt.name = name;
edt.value = value;
frmPost.appendChild(edt);
};
add_formchild('appid', '{$app_id}');
add_formchild('devkey', '{$dev_key}');
add_formchild('market_key', '{$market_key}');
add_formchild('sid', '{$sid}');
add_formchild('scode', '{$scode}');
add_formchild('tdyid', '{$tdy_id}');
add_formchild('tdytoken', '{$tdy_token}');
add_formchild('fee', '{$fee}'); /// 本次需要支付的金额,单位为分
add_formchild('orderid', '{$order_id}'); /// 订单编号
add_formchild('title', '{$title}'); /// 本次支付主题
add_formchild('return_url', '{$return_url}'); /// 支付成功后的通知回调地址, 异步
add_formchild('notice_url', '{$return_url}'); /// 支付成功后的回跳地址, 同步
add_formchild('paytype', '1001');
add_formchild('version', 1);
add_formchild('sign', '');
/// form表单提交
document.body.appendChild(frmPost);
frmPost.submit();
frmPost.remove();
}
startpay();
EOL;
echo $html, PHP_EOL;
*/
?>
</script>
</body>
</html>