Files
youlegames/codes/agent/game/api/sample/transfer/index.php
2026-03-15 01:27:05 +08:00

591 lines
19 KiB
PHP
Raw 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
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;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>转账测试</title>
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
<link href="css/style.css?v=2" rel="stylesheet">
<script src="js/jquery-2.1.4.min.js"></script>
<script src="js/common.js"></script>
</head>
<body id="mainbody">
<?php
$bankList = array(
array('code' => 1, 'name' => '中国工商银行', ),
array('code' => 2, 'name' => '建设银行', ),
array('code' => 3, 'name' => '中国农业银行', ),
array('code' => 4, 'name' => '中国邮政储蓄银行', ),
array('code' => 5, 'name' => '中国银行', ),
array('code' => 6, 'name' => '交通银行', ),
array('code' => 7, 'name' => '招商银行', ),
array('code' => 8, 'name' => '光大银行', ),
array('code' => 9, 'name' => '浦发银行', ),
array('code' => 10, 'name' => '华夏银行', ),
array('code' => 11, 'name' => '广东发展银行', ),
array('code' => 12, 'name' => '中信银行', ),
array('code' => 13, 'name' => '兴业银行', ),
array('code' => 14, 'name' => '民生银行', ),
array('code' => 15, 'name' => '杭州银行', ),
array('code' => 16, 'name' => '上海银行', ),
array('code' => 17, 'name' => '宁波银行', ),
array('code' => 18, 'name' => '平安银行', ),
array('code' => 23, 'name' => '渤海银行', ),
array('code' => 25, 'name' => '徽商银行', ),
array('code' => 26, 'name' => '江苏银行', ),
array('code' => 32, 'name' => '浙商银行', ),
array('code' => 33, 'name' => '北京银行', ),
array('code' => 36, 'name' => '潍坊银行', ),
array('code' => 38, 'name' => '浙江泰隆商业银行', ),
array('code' => 39, 'name' => '济宁银行', ),
array('code' => 40, 'name' => '台州银行', ),
array('code' => 41, 'name' => '汉口银行', ),
array('code' => 42, 'name' => '安徽省农村信用社联合社', ),
array('code' => 43, 'name' => '郑州银行', ),
array('code' => 44, 'name' => '中原银行', ),
array('code' => 45, 'name' => '宜宾商业银行', ),
array('code' => 46, 'name' => '莱商银行', ),
array('code' => 47, 'name' => '日照银行', ),
array('code' => 48, 'name' => '常熟农商银行', ),
array('code' => 49, 'name' => '北京农商银行', ),
array('code' => 50, 'name' => '福建省农村信用社联合社', ),
array('code' => 51, 'name' => '齐商银行', ),
array('code' => 52, 'name' => '云南省农村信用社联合社', ),
array('code' => 53, 'name' => '山东省农村信用社联合社', ),
array('code' => 54, 'name' => '广东华兴银行', ),
array('code' => 55, 'name' => '江西银行', ),
array('code' => 56, 'name' => '东营银行', ),
array('code' => 57, 'name' => '浙江稠州商业银行', ),
array('code' => 58, 'name' => '重庆农村商业银行', ),
array('code' => 59, 'name' => '晋城银行', ),
array('code' => 60, 'name' => '秦农银行', ),
array('code' => 61, 'name' => '长安银行', ),
array('code' => 62, 'name' => '成都银行', ),
array('code' => 63, 'name' => '恒丰银行', ),
array('code' => 64, 'name' => '承德银行', ),
array('code' => 65, 'name' => '绍兴银行', ),
array('code' => 66, 'name' => '广东南粤银行', ),
array('code' => 67, 'name' => '青岛银行', ),
array('code' => 68, 'name' => '江苏长江商行', ),
array('code' => 69, 'name' => '包商银行', ),
array('code' => 70, 'name' => '富滇银行', ),
array('code' => 71, 'name' => '自贡市商业银行', ),
array('code' => 72, 'name' => '湖北农信', ),
array('code' => 73, 'name' => '浙江农信', ),
array('code' => 74, 'name' => '葫芦岛银行', ),
array('code' => 75, 'name' => '昆仑银行', ),
array('code' => 76, 'name' => '苏州银行', ),
array('code' => 77, 'name' => '湖州银行', ),
array('code' => 78, 'name' => '泉州银行', ),
array('code' => 79, 'name' => '广州农村商业银行', ),
array('code' => 81, 'name' => '太仓农村商业银行', ),
array('code' => 82, 'name' => '烟台银行', ),
array('code' => 83, 'name' => '上饶银行', ),
array('code' => 84, 'name' => '绵阳市商业银行', ),
array('code' => 85, 'name' => '德州银行', ),
array('code' => 86, 'name' => '广西农村信用社', ),
array('code' => 87, 'name' => '柳州银行', ),
array('code' => 88, 'name' => '新韩银行中国', ),
array('code' => 89, 'name' => '长沙银行', ),
array('code' => 90, 'name' => '黄河农村商业银行', ),
array('code' => 91, 'name' => '鞍山银行', ),
array('code' => 92, 'name' => '龙江银行', ),
array('code' => 93, 'name' => '河北银行', ),
array('code' => 94, 'name' => '内蒙古银行', ),
array('code' => 95, 'name' => '吉林农村信用社', ),
array('code' => 96, 'name' => '浙江三门银座村镇银行', ),
array('code' => 97, 'name' => '东莞银行', ),
array('code' => 98, 'name' => '泰安银行', ),
array('code' => 99, 'name' => '桂林银行股份有限公司', ),
array('code' => 100, 'name' => '昆山农村商业银行', ),
array('code' => 101, 'name' => '攀枝花市商业银行', ),
array('code' => 102, 'name' => '西安银行', ),
array('code' => 103, 'name' => '营口银行', ),
array('code' => 104, 'name' => '江苏省农村信用社联合社', ),
array('code' => 105, 'name' => '顺德农村商业银行', ),
array('code' => 106, 'name' => '张家港农村商业银行', ),
array('code' => 107, 'name' => '重庆黔江银座村镇银行', ),
array('code' => 108, 'name' => '临商银行', ),
array('code' => 109, 'name' => '洛阳银行', ),
array('code' => 110, 'name' => '邢台银行', ),
array('code' => 111, 'name' => '韩亚银行', ),
array('code' => 112, 'name' => '广西北部湾银行', ),
array('code' => 113, 'name' => '张家口市商业银行', ),
array('code' => 114, 'name' => '珠海华润银行', ),
array('code' => 115, 'name' => '天津银行', ),
array('code' => 116, 'name' => '阜新银行', ),
array('code' => 117, 'name' => '吴江农村商业银行', ),
array('code' => 118, 'name' => '友利银行', ),
array('code' => 119, 'name' => '北京顺义银座村镇银行', ),
array('code' => 120, 'name' => '晋商银行', ),
array('code' => 121, 'name' => '赣州银行', ),
array('code' => 122, 'name' => '鄞州银行', ),
array('code' => 123, 'name' => '兰州银行', ),
array('code' => 124, 'name' => '锦州银行', ),
array('code' => 125, 'name' => '邯郸市商业银行', ),
array('code' => 126, 'name' => '深圳福田银座村镇银行', ),
array('code' => 127, 'name' => '东莞农村商业银行', ),
array('code' => 128, 'name' => '乌鲁木齐市商业银行', ),
array('code' => 129, 'name' => '浙江景宁银座村镇银行', ),
array('code' => 130, 'name' => '威海市商业银行', ),
array('code' => 131, 'name' => '海南省农村信用社', ),
array('code' => 132, 'name' => '商丘银行', ),
array('code' => 133, 'name' => '鄂尔多斯银行', ),
array('code' => 134, 'name' => '江西赣州银座村镇银行', ),
array('code' => 135, 'name' => '天津农商银行', ),
array('code' => 136, 'name' => '重庆银行', ),
array('code' => 137, 'name' => '宁夏银行', ),
array('code' => 138, 'name' => '浙江民泰商业银行', ),
array('code' => 140, 'name' => '长城华西银行', ),
array('code' => 141, 'name' => '廊坊银行', ),
array('code' => 142, 'name' => '沧州银行', ),
array('code' => 143, 'name' => '福建海峡银行', ),
array('code' => 144, 'name' => '嘉兴银行', ),
array('code' => 145, 'name' => '吉林银行', ),
array('code' => 146, 'name' => '青海银行', ),
array('code' => 147, 'name' => '重庆渝北银座村镇银行', ),
array('code' => 148, 'name' => '枣庄银行', ),
);
$bankListStr = '';
foreach($bankList as $v) {
if($v['code'] == 9) {
$bankListStr .= '<option value=' . $v['code'] . ' selected>' . $v['name'] . '</option>';
} else {
$bankListStr .= '<option value=' . $v['code'] . '>' . $v['name'] . '</option>';
}
}
//"bank_id":"银行编号","type":"对公对私","account_no":"收款人帐号","account_name":"收款人姓名","money":"付款金额","reason":"付款理由","province":"省份","city":"城市","bank_name":"收款支行名称"
if (!isset($_POST['account_list'])) {
$html = <<<EOL
<form style="display:none;" id="frm" name="frm" method="post" action="">
<input id = 'account_list' name="account_list" type="text" value="" />
<input id = 'transfer_type' name="transfer_type" type="text" value="" />
</form>
<header class="header">
<span>支付测试</span>
</header>
<!-- 转账类型 -->
<div class="neirong">
<ul>
<li>
<span class="name">转账类型:</span>
<select id='pay_type' class="input" style="width: 250px;" onchange="pay_type()">
<!--option value='1'>银联</option-->
<option value="2" selected>支付宝</option>
<!--option value="3">微信</option-->
<option value="4">汇元</option>
</select>
<sapn class="red">*</sapn>
</li>
</ul>
</div>
<!-- /转账类型 -->
<div class="neirong" id="pay_params_areas" style="padding-top: 0">
<!-- 汇付宝 -->
<form id="form_4" style="display: none">
<ul>
<li>
<span class="name">银行编号:</span>
<select id='bank_id' name='bank_id' class="input" style="width: 250px;">
{$bankListStr}
</select>
<sapn class="red">*</sapn>
</li>
<li>
<span class="name">对公对私:</span>
<select id='type' name='type' class="input" style="width: 250px;">
<option value=0>对私</option>
<option value=1>对公</option>
</select>
<sapn class="red">*</sapn>
</li>
<li>
<span class="name">收款人帐号:</span>
<input id='account_no' name='account_no' value='' class="input">
<sapn class="red">*</sapn>
</li>
<li>
<span class="name">收款人姓名:</span>
<input id='account_name' name='account_name' value='' class="input">
<sapn class="red">*</sapn>
</li>
<li>
<span class="name">付款金额:</span>
<input id='money' name='money' value='' class="input">
<sapn class="red">*</sapn>
</li>
<li>
<span class="name">付款理由:</span>
<input id='reason' name='reason' value='' class="input">
<sapn class="red">*</sapn>
</li>
<li>
<span class="name">省份:</span>
<input id='province' name='province' value='' class="input">
<sapn class="red">*</sapn>
</li>
<li>
<span class="name">城市:</span>
<input id='city' name='city' value='' class="input">
<sapn class="red">*</sapn>
</li>
<li>
<span class="name">收款支行名称:</span>
<input id='bank_name' name='bank_name' value='' class="input">
<sapn class="red">*</sapn>
</li>
</ul>
</form>
<!-- /汇付宝 -->
<!-- 支付宝 -->
<form id="form_2">
<ul>
<li>
<span class="name">账号:</span>
<input id='account_no' name='account_no' value='' class="input">
<sapn class="red">*</sapn>
</li>
<li>
<span class="name">名称:</span>
<input id='account_name' name='account_name' value='' class="input">
<sapn class="red">*</sapn>
</li>
<li>
<span class="name">金额:</span>
<input id='money' name='money' value='' class="input">
<sapn class="red">*</sapn>
</li>
<li>
<span class="name">备注:</span>
<input id='remark' name='remark' value='' class="input">
<sapn class="red">*</sapn>
</li>
</ul>
</form>
<!-- /支付宝 -->
</div>
<footer class="text-center">
<a href="javascript:;" onclick="submit_data();" class="btn btn-blue foot_btn">提交</a>
</footer>
<script language='javascript'>
function ID(id) {
return document.getElementById(id);
}
/**
* 通过选择判断哪个form表单显示
*/
function pay_type() {
// 支付类型
var pay_type = $("#pay_type").val();
var pay_target_form = '#form_'+pay_type;
// form全部隐藏
$("#pay_params_areas form").hide();
// 显示指定form
$(pay_target_form).show();
}
/**
* 把选中的form表单数据提交
*/
function submit_data() {
var pay_type = $("#pay_type").val();
var target = '#form_'+pay_type;
var params = $(target).serializeArray();
var tmp = {};
params.forEach(function(value, index) {
tmp[value['name']] = value['value'];
});
// 转账类型
//tmp['transfer_type'] = pay_type;
console.log(tmp);
ID('account_list').value=JSON.stringify(tmp);
// 转账类型
ID('transfer_type').value=pay_type;
frm.submit();
}
</script>
EOL;
} else {
$account_list = $_POST['account_list'];
$transfer_type = $_POST['transfer_type'];
$order_no = date('YmdHis') . rand(1000, 9999); /// 随机生成一个订单号
$notice_url = dirname(getLocaleUrl()) . '/notice.php'; /// 通知页面地址
$return_url = getLocaleUrl(); /// 回调地址
$data = array(
'appid' => $app_id, /// appid
'devkey' => $dev_key, /// 开发者key
'market_key' => $market_key, /// 门店key
'order_no' => $order_no, /// 订单号
'account_list' => $account_list, /// 收款账户列表
'notice_url' => $notice_url, /// 回调页面地址(异步)
'return_url' => $return_url, /// 回调页面地址(同步)
'transfer_type' => $transfer_type, /// 支付类型(可通过接口获取所有支持的类型列表)
'p1' => 'p1', /// 附加的其他参数, 回调时会原样返回, 参数名可自定义
'p2' => 'p2', /// 附加的其他参数, 回调时会原样返回, 参数名可自定义
'version' => '1', /// 接口版本号, 整型, 目前只支持1
);
$sign = SignParameter($data, $sign_key); /// 对参数进行签名(必须)
$html = <<<EOL
<form style="display:none;" id="frm" name="frm" method="post" action="https://api2.daoqijuyou77.cn/api/transfer/transfer/">
<input name='appid' type='text' value='{$data["appid"]}' />
<input name='devkey' type='text' value='{$data["devkey"]}' />
<input name='market_key' type='text' value='{$data["market_key"]}' />
<input name='order_no' type='text' value='{$data["order_no"]}' />
<input name='account_list' type='text' value='{$data["account_list"]}' />
<input name='notice_url' type='text' value='{$data["notice_url"]}' />
<input name='return_url' type='text' value='{$data["return_url"]}' />
<input name='transfer_type' type='text' value='{$data["transfer_type"]}' />
<input name='p1' type='text' value='{$data["p1"]}'/>
<input name='p2' type='text' value='{$data["p2"]}'/>
<input name='version' type='text' value='{$data["version"]}'/>
<input name='sign' type='text' value='{$sign}'/>
</form>
<script>
frm.submit();
</script>
EOL;
}
echo $html;
?>
</body>
</html>