'HQ微信支付',
'merchantID' => '商户号ID',
'platpkey' => '密匙',
);
$config = array(
'merchantID' => array(
'INPUT_TYPE' => '0',
), //商户号
'platpkey' => array(
'INPUT_TYPE' => '0',
), //密匙
);
/* 模块的基本信息 */
if (isset($read_modules) && $read_modules == true)
{
$module['class_name'] = 'Hqpay';
/* 名称 */
$module['name'] = $payment_lang['name'];
/* 支付方式:1:在线支付;0:线下支付 2:仅wap支付 3:仅app支付 4:兼容wap和app*/
$module['online_pay'] = '4';
/* 配送 */
$module['config'] = $config;
$module['lang'] = $payment_lang;
$module['reg_url'] = '';
return $module;
}
// 支付模型
require_once(APP_ROOT_PATH.'system/libs/payment.php');
class Hqpay_payment implements payment {
public function get_payment_code($payment_notice_id)
{
$pay = array();
$pay['is_wap'] = 1;//
$pay['is_without'] = 1;//跳转外部浏览器
$pay['class_name'] = "Hqpay";
$pay['url'] =SITE_DOMAIN.APP_ROOT.'/mapi/index.php?ctl=pay&act=get_display_code&pay_code=Hqpay¬ice_id='.$payment_notice_id;
$pay['sdk_code'] = array("pay_sdk_type"=>"yjwap","config"=>
array(
"url"=>SITE_DOMAIN.APP_ROOT.'/mapi/index.php?ctl=pay&act=get_display_code&pay_code=Hqpay¬ice_id='.$payment_notice_id,
"is_wap"=>1
)
);
return $pay;
}
public function response($request)
{
$request = array_keys($request,"=");
$payment = $GLOBALS['db']->getRow("select id,config from ".DB_PREFIX."payment where class_name='Hqpay'");
$payment_info['config'] = unserialize($payment['config']);
require_once(APP_ROOT_PATH . 'system/payment/Hqpay/Hqpay.php');
$Hqpay = new Hqpay($payment_info['config']['merchantID'],$payment_info['config']['platpkey']);
$result = $Hqpay->rsaDecrypt($request[0]);
$result = $this->object_array(json_decode($result));
if($result['type']=='charge.succeeded'){
$payment_notice_sn = $result['data']['order_no'];
$outer_notice_sn = $result['data']['order_id'];
$payment_notice = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."payment_notice where notice_sn = '".$payment_notice_sn."'");
$user_diamonds = $GLOBALS['db']->getOne("select diamonds from ".DB_PREFIX."user where id = '".$payment_notice['user_id']."'");
require_once APP_ROOT_PATH."system/libs/cart.php";
$rs = payment_paid($payment_notice['notice_sn'],$outer_notice_sn);
if($rs['status']==1)
{
echo '
付款成功!当前余额:'.$user_diamonds.'
';
exit;
}
else
{
echo '回调失败!关闭当前页面
';
exit;
}
} else{
echo ''.$request['msg'].'请关闭当前页面,返回APP查看
';
exit;
}
}
public function notify($request)
{
$request = array_keys($request,"=");
$payment = $GLOBALS['db']->getRow("select id,config from ".DB_PREFIX."payment where class_name='Hqpay'");
$payment_info['config'] = unserialize($payment['config']);
require_once(APP_ROOT_PATH . 'system/payment/Hqpay/Hqpay.php');
$Hqpay = new Hqpay($payment_info['config']['merchantID'],$payment_info['config']['platpkey']);
$result = $Hqpay->rsaDecrypt($request[0]);
$result = $this->object_array(json_decode($result));
if($result['type']=='charge.succeeded'){
$payment_notice_sn = $result['data']['order_no'];
$outer_notice_sn = $result['data']['order_id'];
$payment_notice = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."payment_notice where notice_sn = '".$payment_notice_sn."'");
require_once APP_ROOT_PATH."system/libs/cart.php";
$rs = payment_paid($payment_notice['notice_sn'],$outer_notice_sn);
if($rs['status']==1)
{
echo 'success';
}
else
{
echo 'fail';
}
}
}
function get_display_code(){
}
public function display_code($payment_notice_id)
{
if($payment_notice_id) {
$payment_notice = $GLOBALS['db']->getRow("select * from " . DB_PREFIX . "payment_notice where id = " . $payment_notice_id);
$money = intval($payment_notice['money']*100);
$payment_info = $GLOBALS['db']->getRow("select id,config,logo from " . DB_PREFIX . "payment where id=" . intval($payment_notice['payment_id']));
$payment_info['config'] = unserialize($payment_info['config']);
$m_config = load_auto_cache("m_config");
$title_name = $m_config['ticket_name'];
if($title_name=='')
$title_name = '虚拟印币';
if(empty($title_name))
{
$title_name = "充值".round($payment_notice['money'],2)."元";
}
$post_url = 'https://119.23.246.110:9001/mps/v1/charges';
$order_no = $payment_notice['notice_sn'];
$app_id = $payment_info['config']['merchantID'];
$api_key = $payment_info['config']['platpkey'];
$channel = 'wx_wap';
$amount = $money;
$client_ip = $this->get_ip();
$subject = $title_name;
$body = $title_name;
$notify_url = 'http://live.huangjiaxiuchang.com/callback/payment/hqpay_notify.php';
$result_url = 'http://live.huangjiaxiuchang.com/callback/payment/hqpay_response.php';
$base64_apiKey = 'Authorization: basic '.base64_encode($api_key.":");
$headers = [$base64_apiKey];
$post_data = array(
'order_no' => $order_no,
'app[id]' => $app_id,
'channel' => $channel,
'amount' => $amount,
'client_ip' => $client_ip,
'subject' => $subject,
'body' => $body,
'extra[result_url]' => $result_url,
'notify_url'=>$notify_url
);
$data = $this->send_post($headers, $post_url, $post_data);
$data = $this->object_array(json_decode($data));
if($data['status']!=200){
echo $data['error']['message'];
}else{
header('Location:'.$data['credential']['pay_url']);
}
}
}
function get_ip(){
if(!empty($_SERVER["HTTP_CLIENT_IP"])){
$cip = $_SERVER["HTTP_CLIENT_IP"];
}
elseif(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){
$cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
}
elseif(!empty($_SERVER["REMOTE_ADDR"])){
$cip = $_SERVER["REMOTE_ADDR"];
}
else{
$cip = '';
}
preg_match("/[\d\.]{7,15}/",$cip,$cips);
$cip = explode(',',$cip);
$cip = $cip[0]?$cip[0]:'unknown';
unset($cips);
return $cip;
}
//
function send_post($headers, $post_url, $post_data){
$str = '';
foreach($post_data as $k => $v){
$str .= "$k=".urlencode($v).'&';
}$post_data = substr($str,0,-1);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$post_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
function object_array($array)
{
if(is_object($array))
{
$array = (array)$array;
}
if(is_array($array))
{
foreach($array as $key=>$value)
{
$array[$key] = $this->object_array($value);
}
}
return $array;
}
}
?>