'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; } } ?>