You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
4.3 KiB
175 lines
4.3 KiB
<?php
|
|
|
|
// 统一支付接口Demo
|
|
|
|
// 加载基础类
|
|
require_once('../library/Base.php');
|
|
$Base = new Base();
|
|
|
|
// 获取配置信息
|
|
$config = $Base->getConfig();
|
|
// var_dump('<pre>', $config);
|
|
|
|
// 接口URL(测试)
|
|
// $api_url = $config['pay_url'];
|
|
$api_url = $_POST['url'];
|
|
$message = array(
|
|
"url"=>$api_url,
|
|
);
|
|
// echo json_encode($message,true);
|
|
|
|
// $appid = 'YOUR_APPID';
|
|
// $appsecret = '';
|
|
$redirect_uri = 'https://shop.heavenk.com/mobile/'; // 回调URL
|
|
|
|
// 构造授权链接
|
|
$auth_url = 'https://open.weixin.qq.com/connect/oauth2/authorize'
|
|
. '?appid=' . urlencode($appid)
|
|
. '&redirect_uri=' . urlencode($redirect_uri)
|
|
. '&response_type=code'
|
|
. '&scope=snsapi_userinfo' // snsapi_base 只获取openid,snsapi_userinfo 获取用户信息
|
|
. '&state=STATE'; // wechat_redirect
|
|
|
|
// 如果用户已经授权,则重定向到回调URL,并获取用户的openid
|
|
if (isset($_GET['code'])) {
|
|
$code = $_GET['code'];
|
|
|
|
// $code = '100010';
|
|
|
|
// 构造获取access_token的URL
|
|
$token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token'
|
|
. '?appid=' . urlencode($appid)
|
|
. '&secret=' . urlencode($appsecret)
|
|
. '&code=' . urlencode($code)
|
|
. '&grant_type=authorization_code';
|
|
|
|
// 发送HTTP请求获取access_token
|
|
|
|
// 创建一个cURL句柄
|
|
$ch = curl_init();
|
|
|
|
// 设置请求的URL和其他选项
|
|
curl_setopt($ch, CURLOPT_URL, $token_url);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
|
|
// 发送HTTP GET请求并获取响应
|
|
$response = curl_exec($ch);
|
|
|
|
// 检查是否有错误发生
|
|
if(curl_errno($ch)) {
|
|
echo 'cURL Error: ' . curl_error($ch);
|
|
}
|
|
|
|
// 关闭cURL句柄
|
|
curl_close($ch);
|
|
|
|
// 输出响应
|
|
$response = json_decode($response);
|
|
// var_dump($response->openid);
|
|
$_SESSION['openid'] = $response->openid;
|
|
$config['openid'] = $response->openid;
|
|
|
|
// // 在这里处理获取到的openid
|
|
// echo $openid;
|
|
} else {
|
|
// 如果没有授权,则重定向到授权页面
|
|
header('Location: ' . $auth_url);
|
|
var_dump($_GET['code']);
|
|
exit();
|
|
}
|
|
// 加个body字段传中文试试
|
|
|
|
// 组装交易报文
|
|
$reqsn_prefix = date('Ymd');
|
|
// var_dump("uniq_id(reqsn)");
|
|
// echo "\r\n";
|
|
// var_dump(uniqid($reqsn_prefix));
|
|
$trade_data = array(
|
|
'orgid' => $config['org_num'],
|
|
'cusid' => $config['cusid'],
|
|
'branchno' => $config['branchno'],
|
|
'termcode' => $config['termcode'],
|
|
'version' => $config['version'],
|
|
'trxamt' => '1',
|
|
'reqsn' => uniqid($reqsn_prefix),
|
|
'producp' => 'JX0002',
|
|
'transtype' => 'JSP511',
|
|
'paytype' => 'W02',
|
|
'randomstr' => md5( uniqid() ),
|
|
'body' => 'pages',
|
|
'acct' => $config['openid'],
|
|
);
|
|
|
|
// 生成签名
|
|
$sign = $Base->Crypt->makeSign($trade_data);
|
|
if($sign === false)
|
|
{
|
|
// echo $Base->Crypt->err_msg;
|
|
$errorMessage = array(
|
|
"data"=>"makeSign error..."
|
|
);
|
|
return json_encode($errorMessage,true);
|
|
die();
|
|
}
|
|
// echo "\r\n";
|
|
// echo "[sign]: {$sign}";
|
|
// die();
|
|
|
|
// 加密交易报文
|
|
$crypted_trade_data = $Base->Crypt->encryptTradeData($trade_data);
|
|
if($crypted_trade_data === false)
|
|
{
|
|
// echo $Base->Crypt->err_msg;
|
|
$errorMessage = array(
|
|
"data"=>"encryptTradeData error..."
|
|
);
|
|
return json_encode($errorMessage,true);
|
|
die();
|
|
}
|
|
// echo "\r\n";
|
|
// echo "[crypted message]: {$crypted_trade_data}";
|
|
// die();
|
|
|
|
// 发送报文
|
|
// echo "\r\n";
|
|
// var_dump($api_url);
|
|
$response = $Base->Request->send($api_url, $crypted_trade_data, $sign);
|
|
if($response === false)
|
|
{
|
|
// echo $Base->Request->err_msg;
|
|
$errorMessage = array(
|
|
"data"=>"send error..."
|
|
);
|
|
return json_encode($errorMessage,true);
|
|
die();
|
|
}
|
|
// echo "\r\n";
|
|
// echo "[response message]: {$response}";
|
|
|
|
// 解析响应报文
|
|
$response = json_decode($response, true);
|
|
$response_data_crypted = $response['data'];
|
|
$response_sign = $response['sign'];
|
|
// echo "\r\n";
|
|
// echo "[response sign]: {$response_sign}";
|
|
// echo "\r\n";
|
|
// echo "[response data (ciphertext)]: {$response_data_crypted}";
|
|
|
|
// 解密响应密文
|
|
$response_data = $Base->Crypt->decryptTradeData($response_data_crypted);
|
|
if($response_data === false)
|
|
{
|
|
// echo $Base->Crypt->err_msg;
|
|
$errorMessage = array(
|
|
"data"=>"decryptTradeData error..."
|
|
);
|
|
return json_encode($errorMessage,true);
|
|
die();
|
|
}
|
|
// echo "\r\n";
|
|
// echo "[response data(clear text)]: {$response_data}";
|
|
// die();
|
|
echo $response_data;
|
|
|
|
?>
|
|
|
|
|