| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- <?php
- $payment_lang = array(
- 'name' => '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 '<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=2.0, user-scalable=0,minimum-scale=0.5"><title></title></head><body><div style="width:120px;height:40px;line-height:40px;font-size:14px;text-align:center;background:#ff4d7f;color:#fff;margin:20px auto;border-radius:5px;" >付款成功!当前余额:'.$user_diamonds.'</div></body></html>';
- exit;
- }
- else
- {
- echo '<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=2.0, user-scalable=0,minimum-scale=0.5"><title></title></head><body><div style="width:120px;height:40px;line-height:40px;font-size:14px;text-align:center;background:#ff4d7f;color:#fff;margin:20px auto;border-radius:5px;" >回调失败!关闭当前页面</div></body></html>';
- exit;
- }
- } else{
- echo '<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=2.0, user-scalable=0,minimum-scale=0.5"><title></title></head><body><div style="width:120px;height:40px;line-height:40px;font-size:14px;text-align:center;background:#ff4d7f;color:#fff;margin:20px auto;border-radius:5px;" >'.$request['msg'].'请关闭当前页面,返回APP查看</div></body></html>';
- 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;
- }
- }
- ?>
|