Beispiel #1
0
 function getToken()
 {
     include_once CUR_CONF_PATH . 'lib/pay/hg_pay.class.php';
     include_once CUR_CONF_PATH . 'lib/hg_order.class.php';
     $config = array();
     $hgPayFactory = hgPayFactory::get_instance($config);
     $pay_driver = $hgPayFactory->get_driver('weixin');
     $ret = $pay_driver->getToken();
     var_dump($ret);
 }
Beispiel #2
0
 /**
  * 返回当前缓存工厂类实例
  * @param array $cache_config
  */
 public static function get_instance($config = array())
 {
     //当前工厂类实例为空时初始化该对象
     if (hgPayFactory::$pay_factory == '' || !empty($config)) {
         hgPayFactory::$pay_factory = new hgPayFactory();
         if (!empty($config)) {
             hgPayFactory::$pay_factory->config = $config;
         }
     }
     return hgPayFactory::$pay_factory;
 }
Beispiel #3
0
 public function to_pay()
 {
     $trade_number = $this->input['trade_number'];
     $pay_type = trim($this->input['pay_type']);
     if (!$trade_number) {
         $this->errorOutput('NO TRADE_NUMBER');
     }
     if (!$pay_type) {
         $this->errorOutput('NO PAY_TYPE');
     }
     if (!in_array($pay_type, array_keys($this->settings['pay_type']))) {
         $this->errorOutput('ERROR PAY_TYPE');
     }
     $sql = "SELECT * FROM " . DB_PREFIX . "pay_config WHERE 1 AND pay_type = '" . $pay_type . "' AND status = 1";
     $pay_type_info = $this->db->query_first($sql);
     if (empty($pay_type_info)) {
         $this->errorOutput('ERROR PAY_TYPE');
     }
     $sql = "SELECT * FROM " . DB_PREFIX . "orders WHERE 1 AND trade_number = '" . $trade_number . "'";
     $order_info = $this->db->query_first($sql);
     if (empty($order_info)) {
         $this->errorOutput('NO EXISTS ORDER');
     }
     if ($order_info['trade_status'] != 'NOT_PAY') {
         $this->errorOutput('ORDER CAN NOT PAY');
     }
     $order_info['title'] = $order_info['title'] ? $order_info['title'] : '订单';
     $order_info['trade_create_time'] = date('YmdHis', $order_info['trade_create_time']);
     $order_info['trade_expire_time'] = date('YmdHis', $order_info['trade_expire_time']);
     $order_info['total_fee'] = intval($order_info['total_fee'] * 100);
     $pay_type_info['pay_config'] = $pay_type_info['pay_config'] ? unserialize($pay_type_info['pay_config']) : array();
     $pay_type_info['pay_config']['type'] = $pay_type_info['pay_type'];
     $pay_config[$pay_type_info['pay_type']] = $pay_type_info['pay_config'];
     include_once CUR_CONF_PATH . 'lib/pay/hg_pay.class.php';
     $hgPayFactory = hgPayFactory::get_instance($pay_config);
     $pay_driver = $hgPayFactory->get_driver($pay_type);
     $ret = $pay_driver->getPayParam($order_info);
     if (empty($ret)) {
         $this->errorOutput('FAILURE');
     }
     if ($ret['errno']) {
         $this->errorOutput($ret['errmsg']);
     }
     if (!$ret['sdk_param']) {
         $this->errorOutput('RETURN PARAM ERROR');
     }
     foreach ((array) $ret as $key => $val) {
         $this->addItem_withkey($key, $val);
     }
     $this->output();
 }
Beispiel #4
0
 function show()
 {
     include_once CUR_CONF_PATH . 'lib/pay/hg_pay.class.php';
     include_once CUR_CONF_PATH . 'lib/hg_order.class.php';
     $config = array();
     $hgPayFactory = hgPayFactory::get_instance($config);
     $pay_driver = $hgPayFactory->get_driver('unionpay');
     $data = array('orderTime' => '20141120145525', 'settleDate' => '1120', 'orderNumber' => 'YB1098777782113519', 'exchangeRate' => '0', 'signature' => 'b63ffb2a963a2d10232f7008769afb92', 'settleCurrency' => '156', 'signMethod' => 'MD5', 'transType' => '01', 'respCode' => '00', 'charset' => 'UTF-8', 'sysReserved' => '{traceTime=1120145525&acqCode=00215800&traceNumber=009978}', 'version' => '1.0.0', 'settleAmount' => '1000', 'transStatus' => '00', 'merId' => '880000000002996', 'qn' => '201411201455250099787');
     $cancle_data = array('orderTime' => '20141120172921', 'settleDate' => '1120', 'orderNumber' => '20141120172921', 'exchangeRate' => '0', 'signature' => '8b6c94a155ee96e756bb9a5dd25297ce', 'settleCurrency' => '156', 'signMethod' => 'MD5', 'transType' => '31', 'respCode' => '00', 'charset' => 'UTF-8', 'sysReserved' => '{traceTime=1120172921&acqCode=00215800&traceNumber=008859}', 'version' => '1.0.0', 'settleAmount' => '1000', 'transStatus' => '00', 'merId' => '880000000002996', 'qn' => '201411201729210088597');
     $refued_data = array('orderTime' => '20141120174303', 'settleDate' => '1120', 'orderNumber' => '20141120174303', 'exchangeRate' => '0', 'signature' => '9f293b265deb908164275d6359e861f4', 'settleCurrency' => '156', 'signMethod' => 'MD5', 'transType' => '04', 'respCode' => '00', 'charset' => 'UTF-8', 'sysReserved' => '{traceTime=1120174303&acqCode=00215800&traceNumber=010740}', 'version' => '1.0.0', 'settleAmount' => '2000', 'transStatus' => '00', 'merId' => '880000000002996', 'qn' => '201411201743030107407');
     $reqString = $pay_driver->createLinkString($refued_data);
     echo $reqString;
     exit;
     var_dump($data);
 }
Beispiel #5
0
 function show()
 {
     include_once CUR_CONF_PATH . 'lib/pay/hg_pay.class.php';
     include_once CUR_CONF_PATH . 'lib/hg_order.class.php';
     $config = array();
     $hgPayFactory = hgPayFactory::get_instance($config);
     $pay_driver = $hgPayFactory->get_driver('unionpay');
     $order = new HgOrder();
     $order->desc = '我是来测试退货的';
     $order->trade_create_time = '20141120174303';
     //date('YmdHis', TIMENOW);
     $order->trade_expire_time = date('YmdHis', TIMENOW + 3600);
     $order->trade_num = '20141120174303';
     //date('YmdHis', TIMENOW);
     $order->total_fee = '2000';
     $data = $pay_driver->getPayParam($order);
     //        $order->pay_trade_num = '20141120174303';
     //        $data = $pay_driver->query($order);
     var_dump($data);
 }
Beispiel #6
0
 public function show()
 {
     $_POST = array('discount' => '0.00', 'payment_type' => '1', 'subject' => '烟台总站 --- 潍坊', 'trade_no' => '2015051900001000460052699577', 'buyer_email' => '*****@*****.**', 'gmt_create' => '2015-05-19 14:50:16', 'notify_type' => 'trade_status_sync', 'quantity' => '1', 'out_trade_no' => 'HG143201806422973', 'seller_id' => '2088311932496637', 'notify_time' => '2015-05-19 14:50:16', 'body' => '烟台总站 --- 潍坊', 'trade_status' => 'WAIT_BUYER_PAY', 'is_total_fee_adjust' => 'Y', 'total_fee' => '0.01', 'seller_email' => '*****@*****.**', 'price' => '0.01', 'buyer_id' => '2088202251232465', 'notify_id' => '3c3fb0e8c69af7e943ede698a34060814k', 'use_coupon' => 'N', 'sign_type' => 'RSA', 'sign' => 'OhYoy9zkSl800eFteXYG4JkJtNPVC++fbCM3gfcEfvAgpuaOl07v2VkH9KnwcGYYhMHp1GoZNh6h9SuPYBM5444BZgXtz1ilqUTpQBjuF5nZ+WA4Mnz4iEA0Ib+V7LDQIiIO5aM+JlGvpADwGKZ8EnVHjL2GA0ZMPpDMhWQy11s=');
     //查询支付配置
     $sql = "SELECT pay_config FROM " . DB_PREFIX . "pay_config WHERE 1 AND pay_type = 'alipay'";
     $pay_type_info = $this->db->query_first($sql);
     if (empty($pay_type_info)) {
         echo "fail";
         exit;
     }
     $pay_type_info['pay_config'] = $pay_type_info['pay_config'] ? unserialize($pay_type_info['pay_config']) : array();
     $pay_type_info['pay_config']['type'] = 'alipay';
     $pay_config['alipay'] = $pay_type_info['pay_config'];
     include_once CUR_CONF_PATH . 'lib/pay/hg_pay.class.php';
     $hgPayFactory = hgPayFactory::get_instance($pay_config);
     $pay_driver = $hgPayFactory->get_driver('alipay');
     //签名验证(RSA方式)  (参数: 待签名字符串;支付宝公钥;sign值)
     //这里只要将待签名数组按键值排序即可 (支付宝需要按字母升序)
     if ($pay_driver->verifyNotify($_POST)) {
         //验证订单号是不是我们自己的订单号
         echo 'PASS';
         exit;
         // 服务器签名验证成功
         if ($_POST['transStatus'] == '00') {
             $sql = "SELECT app_uniqueid, order_type, out_trade_number,out_trade_info,trade_number, trade_status, total_fee FROM " . DB_PREFIX . "orders WHERE trade_number = '" . $_POST['orderNumber'] . "'";
             $order_info = $this->db->query_first($sql);
             if ($order_info['trade_status'] == 'NOT_PAY') {
                 if (intval($order_info['total_fee'] * 100) != $_POST['settleAmount']) {
                     $trade_status = 'TRADE_EXCEPTION';
                 }
                 //更改订单状态
                 $info = array('trade_deal_time' => time(), 'trade_status' => $trade_status ? $trade_status : "HAS_PAY");
                 $condition = " trade_number = '" . $_POST['orderNumber'] . "'";
                 $this->db->update_data($info, 'orders', $condition);
                 //记录交易流水
                 $trade_flow = array('trade_number' => $order_info['trade_number'], 'pay_platform' => 'alipay', 'trade_type' => $_POST['transType'] == '01' ? 1 : 2, 'qn' => $_POST['qn'], 'trade_fee' => $_POST['settleAmount'] / 100, 'trade_time' => TIMENOW, "trade_status" => "TRADE_SUCCESS");
                 $this->db->insert_data($trade_flow, 'order_bank_trade_flow');
                 if ($order_info['order_type'] == 'THIRD_PARTY') {
                     //通知第三方订单
                     $sql = "SELECT * FROM " . DB_PREFIX . "app_access WHERE app_uniqueid = '" . $order_info['app_uniqueid'] . "'";
                     $app = $this->db->query_first($sql);
                     if (!empty($app)) {
                         include_once ROOT_PATH . 'lib/class/curl.class.php';
                         $curl = new curl($app['host'], $app['dir']);
                         $curl->setSubmitType('post');
                         $curl->setReturnFormat('json');
                         $curl->initPostData();
                         $curl->addRequestData('a', $app['pay_func']);
                         $curl->addRequestData('trade_number', $order_info['out_trade_number']);
                         $curl->addRequestData('total_fee', $order_info['total_fee']);
                         $curl->addRequestData('out_trade_info', $order_info['out_trade_info']);
                         //第三方订单详情
                         $ret = $curl->request($app['request_file']);
                         if ($ret['success'] == 1) {
                             $this->db->update_data(array('out_trade_notify' => 2, 'out_trade_notify_time' => TIMENOW), 'orders', " trade_number = '" . $order_info['trade_number'] . "'");
                         } else {
                             $this->db->update_data(array('out_trade_notify' => 0, 'out_trade_notify_time' => TIMENOW), 'orders', " trade_number = '" . $order_info['trade_number'] . "'");
                         }
                     }
                 }
                 echo 'success';
             } else {
                 echo "fail";
             }
         } else {
             echo "fail";
         }
     } else {
         // 服务器签名验证成功
         echo "fail";
     }
 }
Beispiel #7
0
 public function show()
 {
     //查询支付配置
     $sql = "SELECT pay_config FROM " . DB_PREFIX . "pay_config WHERE 1 AND pay_type = 'unionpay'";
     $pay_type_info = $this->db->query_first($sql);
     if (empty($pay_type_info)) {
         echo "fail";
         exit;
     }
     $pay_type_info['pay_config'] = $pay_type_info['pay_config'] ? unserialize($pay_type_info['pay_config']) : array();
     $pay_type_info['pay_config']['type'] = 'unionpay';
     $pay_config['unionpay'] = $pay_type_info['pay_config'];
     include_once CUR_CONF_PATH . 'lib/pay/hg_pay.class.php';
     $hgPayFactory = hgPayFactory::get_instance($pay_config);
     $pay_driver = $hgPayFactory->get_driver('unionpay');
     if ($pay_driver->verifySignature($_POST)) {
         // 服务器签名验证成功
         if ($_POST['transStatus'] == '00') {
             $sql = "SELECT app_uniqueid, order_type, out_trade_number,trade_number, trade_status, total_fee FROM " . DB_PREFIX . "orders WHERE trade_number = '" . $_POST['orderNumber'] . "'";
             $order_info = $this->db->query_first($sql);
             if ($order_info['trade_status'] == 'NOT_PAY') {
                 if (intval($order_info['total_fee'] * 100) != $_POST['settleAmount']) {
                     $trade_status = 'TRADE_EXCEPTION';
                 }
                 //更改订单状态
                 $info = array('trade_deal_time' => time(), 'trade_status' => $trade_status ? $trade_status : "HAS_PAY");
                 $condition = " trade_number = '" . $_POST['orderNumber'] . "'";
                 $this->db->update_data($info, 'orders', $condition);
                 //记录交易流水
                 $trade_flow = array('trade_number' => $order_info['trade_number'], 'pay_platform' => 'unionpay', 'trade_type' => $_POST['transType'] == '01' ? 1 : 2, 'qn' => $_POST['qn'], 'trade_fee' => $_POST['settleAmount'] / 100, 'trade_time' => TIMENOW, "trade_status" => "TRADE_SUCCESS");
                 $this->db->insert_data($trade_flow, 'order_bank_trade_flow');
                 if ($order_info['order_type'] == 'THIRD_PARTY') {
                     //通知第三方订单
                     $sql = "SELECT * FROM " . DB_PREFIX . "app_access WHERE app_uniqueid = '" . $order_info['app_uniqueid'] . "'";
                     $app = $this->db->query_first($sql);
                     if (!empty($app)) {
                         include_once ROOT_PATH . 'lib/class/curl.class.php';
                         $curl = new curl($app['host'], $app['dir']);
                         $curl->setSubmitType('post');
                         $curl->setReturnFormat('json');
                         $curl->initPostData();
                         $curl->addRequestData('a', $app['pay_func']);
                         $curl->addRequestData('trade_number', $order_info['out_trade_number']);
                         $curl->addRequestData('total_fee', $order_info['total_fee']);
                         $ret = $curl->request($app['request_file']);
                         if ($ret['success'] == 1) {
                             $this->db->update_data(array('out_trade_notify' => 2, 'out_trade_notify_time' => TIMENOW), 'orders', " trade_number = '" . $order_info['trade_number'] . "'");
                         } else {
                             $this->db->update_data(array('out_trade_notify' => 0, 'out_trade_notify_time' => TIMENOW), 'orders', " trade_number = '" . $order_info['trade_number'] . "'");
                         }
                     }
                 }
                 echo 'success';
             } else {
                 echo "fail";
             }
         } else {
             echo "fail";
         }
     } else {
         // 服务器签名验证成功
         echo "fail";
     }
 }
Beispiel #8
0
 public function show()
 {
     //查询支付配置
     $sql = "SELECT pay_config FROM " . DB_PREFIX . "pay_config WHERE 1 AND pay_type = 'weixin'";
     $pay_type_info = $this->db->query_first($sql);
     if (empty($pay_type_info)) {
         echo "fail";
         exit;
     }
     $pay_type_info['pay_config'] = $pay_type_info['pay_config'] ? unserialize($pay_type_info['pay_config']) : array();
     $pay_type_info['pay_config']['type'] = 'weixin';
     $pay_config['weixin'] = $pay_type_info['pay_config'];
     include_once CUR_CONF_PATH . 'lib/pay/hg_pay.class.php';
     $hgPayFactory = hgPayFactory::get_instance($pay_config);
     $pay_driver = $hgPayFactory->get_driver('weixin');
     if ($pay_driver->verifySignature($_REQUEST)) {
         //商户交易单号
         $out_trade_no = $_REQUEST["out_trade_no"];
         //财付通订单号
         $transaction_id = $_REQUEST["transaction_id"];
         //商品金额,以分为单位
         $total_fee = $_REQUEST["total_fee"];
         //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee
         $discount = $_REQUEST["discount"];
         //支付结果
         $trade_state = $_REQUEST["trade_state"];
         // 服务器签名验证成功
         if ($trade_state == '0') {
             $sql = "SELECT app_uniqueid, order_type, out_trade_number,trade_number, trade_status, total_fee FROM " . DB_PREFIX . "orders WHERE trade_number = '" . $out_trade_no . "'";
             $order_info = $this->db->query_first($sql);
             if ($order_info['trade_status'] == 'NOT_PAY') {
                 if (intval($order_info['total_fee'] * 100) != $total_fee + $discount) {
                     $trade_status = 'TRADE_EXCEPTION';
                 }
                 //更改订单状态
                 $info = array('trade_deal_time' => time(), 'trade_status' => $trade_status ? $trade_status : "HAS_PAY");
                 $condition = " trade_number = '" . $out_trade_no . "'";
                 $this->db->update_data($info, 'orders', $condition);
                 //记录交易流水
                 $trade_flow = array('trade_number' => $order_info['trade_number'], 'pay_platform' => 'unionpay', 'trade_type' => $_REQUEST['is_refund'] == true ? 1 : 2, 'qn' => $_POST['qn'], 'trade_fee' => ($total_fee + $discount) / 100, 'trade_time' => TIMENOW, "trade_status" => "TRADE_SUCCESS");
                 $this->db->insert_data($trade_flow, 'order_bank_trade_flow');
                 if ($order_info['order_type'] == 'THIRD_PARTY') {
                     //通知第三方订单
                     $sql = "SELECT * FROM " . DB_PREFIX . "app_access WHERE app_uniqueid = '" . $order_info['app_uniqueid'] . "'";
                     $app = $this->db->query_first($sql);
                     if (!empty($app)) {
                         include_once ROOT_PATH . 'lib/class/curl.class.php';
                         $curl = new curl($app['host'], $app['dir']);
                         file_put_contents('../cache/4444.txt', var_export($curl, 1), FILE_APPEND);
                         $curl->setSubmitType('post');
                         $curl->setReturnFormat('json');
                         $curl->initPostData();
                         $curl->addRequestData('a', $app['pay_func']);
                         $curl->addRequestData('trade_number', $order_info['out_trade_number']);
                         $curl->addRequestData('total_fee', $order_info['total_fee']);
                         $ret = $curl->request($app['request_file']);
                         if ($ret['success'] == 1) {
                             $this->db->update_data(array('out_trade_notify' => 1, 'out_trade_notify_time' => TIMENOW), 'orders', " trade_number = '" . $order_info['trade_number'] . "'");
                         } else {
                             $this->db->update_data(array('out_trade_notify' => 0, 'out_trade_notify_time' => TIMENOW), 'orders', " trade_number = '" . $order_info['trade_number'] . "'");
                         }
                     }
                 }
                 echo 'success';
             } else {
                 echo "fail";
             }
         } else {
             echo "fail";
         }
     } else {
         // 服务器签名验证成功
         echo "fail";
     }
 }