function getresult() { $resHandler = new ResponseHandler(); $resHandler->setKey($key); //判断签名 if ($resHandler->isTenpaySign()) { //通知id $result_config['notify_id'] = $resHandler->getParameter("notify_id"); //商户订单号 $result_config['out_trade_no'] = $resHandler->getParameter("out_trade_no"); //财付通订单号 $result_config['transaction_id'] = $resHandler->getParameter("transaction_id"); //金额,以分为单位 $result_config['total_fee'] = $resHandler->getParameter("total_fee"); //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee $result_config['discount'] = $resHandler->getParameter("discount"); //支付结果 $result_config['trade_state'] = $resHandler->getParameter("trade_state"); //交易模式,1即时到账 $result_config['trade_mode'] = $resHandler->getParameter("trade_mode"); return $result_config; } else { return null; } }
function getOrderStatusFromPlex($plexOrderId) { $plexServiceRequestObject = new plexServiceRequest(); $responseHandlerObject = new ResponseHandler(); $paramArray = array(array('Name' => 'Customer_Code', 'Value' => '', 'Required' => 'false', 'Output' => 'false'), array('Name' => 'Email_Address', 'Value' => '', 'Required' => 'false', 'Output' => 'false'), array('Name' => 'Order_No', 'Value' => $plexOrderId, 'Required' => 'false', 'Output' => 'false')); $rawResponse = $plexServiceRequestObject->call('ExecuteDataSource', PLEX_GET_ORDER_STATUS, $paramArray); return $responseHandlerObject->getOrderStatusFromRawResponse($rawResponse); }
public function testHeadersAlreadySent() { $headers = $this->getMock('Riimu\\Kit\\FileResponse\\Headers', ['headersSent']); $headers->expects($this->once())->method('headersSent')->will($this->returnValue(true)); $handler = new ResponseHandler($headers); $this->setExpectedException('RuntimeException'); $handler->send($this->getMock('Riimu\\Kit\\FileResponse\\Response\\Response')); }
public function WriteNewPlexOrder($orderObject, $billingAddressCode, $shippingAddressCode, $Prepaid_Authorization, $poNo) { try { $plexServiceRequestObject = new plexServiceRequest(); $responseHandlerObject = new ResponseHandler(); if ($Prepaid_Authorization == 'test' || empty($Prepaid_Authorization)) { $Prepaid_Authorization = '1324567890'; /* This Prepaid_Authorization is for testing */ } //echo 'Prepaid_Authorization='.$Prepaid_Authorization; $plexuserUserId = 'PWPU' . str_pad($orderObject->get_user_id(), 6, '0', STR_PAD_LEFT); $freightTerms = "PrePaid & Add"; $shipping_service = str_replace(' ', '_', strtoupper($orderObject->get_shipping_method())); if ('FREE_SHIPPING' == trim($shipping_service)) { $shipping_service = 'UPS_GROUND'; $freightTerms = 'PrePaid'; } else { if ('FLAT_RATE' == trim($shipping_service)) { $shipping_service = 'UPS_GROUND'; } } /*request parameter*/ $paramArray = array(array('Name' => 'Customer_Code', 'Value' => $plexuserUserId, 'Required' => 'false', 'Output' => 'false'), array('Name' => 'Ship_To_Customer_Address_Code', 'Value' => $shippingAddressCode, 'Required' => 'false', 'Output' => 'false'), array('Name' => 'Bill_To_Customer_Address_Code', 'Value' => $billingAddressCode, 'Required' => 'false', 'Output' => 'false'), array('Name' => 'Tax_Amount', 'Value' => $orderObject->get_total_tax(), 'Required' => 'false', 'Output' => 'false'), array('Name' => 'Prepaid_Authorization', 'Value' => $Prepaid_Authorization, 'Required' => 'false', 'Output' => 'false'), array('Name' => 'PO_No', 'Value' => $poNo, 'Required' => 'false', 'Output' => 'false'), array('Name' => 'Order_No_Prefix', 'Value' => 'PWPU', 'Required' => 'false', 'Output' => 'false'), array('Name' => 'Carrier Code', 'Value' => 'UNITED_PARCEL_SERVICE_INC', 'Required' => 'false', 'Output' => 'false'), array('Name' => 'Shipping_Service', 'Value' => $shipping_service, 'Required' => 'false', 'Output' => 'false'), array('Name' => 'Ship_From_Building_Code', 'Value' => "AND", 'Required' => 'false', 'Output' => 'false'), array('Name' => 'Prepaid_Amount', 'Value' => $orderObject->get_total(), 'Required' => 'false', 'Output' => 'false'), array('Name' => 'Freight_Terms', 'Value' => $freightTerms, 'Required' => 'false', 'Output' => 'false'), array('Name' => 'Freight_Amount', 'Value' => $orderObject->get_total_shipping(), 'Required' => 'false', 'Output' => 'false')); PlexLog::addLog(' Info =>(' . $orderObject->get_user_id() . ') shipping cost (' . $orderObject->get_total_shipping() . ') '); foreach ($paramArray as $key => $value) { PlexLog::addLog(' Info =>(' . $orderObject->get_user_id() . ') order creation paramArray => ' . $value["Name"] . ' : ' . $value["Value"]); # code... } /* call the service*/ $rawResponse = $plexServiceRequestObject->call('ExecuteDataSource', PLEX_WRITE_NEW_ORDER, $paramArray); // echo "<pre>"; // print_r($rawResponse); // echo "</pre>"; /* get the order id from the raw response data */ $plexOrderId = $responseHandlerObject->getOrderNoFromRawResponse($rawResponse); PlexLog::addLog(' Info =>(' . $orderObject->get_user_id() . ') A new Plex Order is generated (' . $plexOrderId . ') '); /* add all item present in the wooCommerce order object to plex order */ $allItems = $orderObject->get_items(); foreach ($allItems as $key => $value) { $productId = $value['product_id']; $Part_No = get_post_meta($productId, 'plexPartNo', true); $Quantity = $value['qty']; /*$Price = get_post_meta($productId, '_regular_price', true);*/ $lineTotalPrice = $value['line_total']; // total price /* as we have to send discounted price to plex*/ $Price = $lineTotalPrice / $Quantity; /* adding product to plex order*/ $retVal = $this->addProductwithPlexOrder($plexOrderId, $orderObject, $Part_No, $Price, $Quantity); PlexLog::addLog(' Info =>(' . $orderObject->get_user_id() . ') Adding products(' . $value['product_id'] . ') to Plex order( id:' . $plexOrderId . ') : Resault=' . $retVal . ' ( Part_No = ' . $Part_No . ' ; Quantity = ' . $Quantity . ' ; Price=' . $Price . ') '); } return $plexOrderId; } catch (Exception $exec) { PlexLog::addLog(' Error =>(' . $customerId . ') Exception occure while WriteNewPlexOrder. Message :' . $exec->getMessage()); return ''; } }
function globalExceptionHandler($e) { global $responseHandler; Logging::logException($e); Logging::logDebug(Util::array2str(debug_backtrace())); if ($responseHandler == NULL) { $responseHandler = new ResponseHandler(new OutputHandler()); } $responseHandler->unknownServerError($e->getMessage()); die; }
public static function processRequest() { global $logger; $request = $rawResponse = $response = null; try { /* Authenticate */ $valid = self::authenticateRequest($_SERVER); /* Fetch POST data */ $post = file_get_contents("php://input"); $logger->debug("POST Data Received: " . $post); /* Formulate the request object */ $request = RequestParser::parseInput($_SERVER, $_GET, $post); $logger->debug("REQUEST Object: " . $request->toString()); /* Handle the request */ $rawResponse = RequestHandler::process($request); $logger->debug("RESPONSE Object: " . json_encode($rawResponse)); } catch (ApiException $e) { /* Generate response from Exception details */ $logger->error("ApiException encountered!! " . $e->toString()); $rawResponse = array('httpStatusCode' => $e->getHttpStatusCode(), 'httpStatusCodeMessage' => $e->getHttpStatusCodeMessage(), 'otherHeaders' => $e->getOtherHeaders(), 'code' => $e->getCode(), 'message' => $e->getMessage(), 'debug' => false, 'data' => null); } // Format the $rawResponse variable and output $format = !isset($request) ? 'json' : $request->getFormat(); $debug = !isset($request) ? false : $request->getDebug(); $response = ResponseHandler::respond($rawResponse, $format, $debug); $logger->debug("Output: " . $response); }
function __construct() { $this->WapResponseHandler(); } function WapResponseHandler(){ parent::ResponseHandler(); }
public function tenpay_recharge_return (){ import("@.ORG.TenpayComputer.ResponseHandler"); $resHandler = new ResponseHandler(); $key=trim(C('tenpay_partnerkey')); $resHandler->setKey($key); $out_trade_no = $this->_get('out_trade_no'); //if($resHandler->isTenpaySign()) { $notify_id = $resHandler->getParameter("notify_id"); //商户订单号 $out_trade_no = $resHandler->getParameter("out_trade_no"); //财付通订单号 $transaction_id = $resHandler->getParameter("transaction_id"); //金额,以分为单位 $total_fee = $resHandler->getParameter("total_fee"); //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee $discount = $resHandler->getParameter("discount"); //支付结果 $trade_state = $resHandler->getParameter("trade_state"); //交易模式,1即时到账 $trade_mode = $resHandler->getParameter("trade_mode"); if("0" == $trade_state) { $total_fee=$total_fee/100; $indent=M('Agent_expenserecords')->where(array('orderid'=>$out_trade_no))->find(); if($indent!=false){ if($indent['status']==1){$this->error('该订单已经处理过,请勿重复操作');} //购买套餐,价格为优惠前价格 if (isset($_GET['discountpriceid'])){ $thisPrice=M('Agent_price')->where(array('id'=>intval($_GET['discountpriceid'])))->find(); $indent['amount']=$thisPrice['maxaccount']*$this->thisAgent['wxacountprice']; } // M('Agent')->where(array('id'=>$indent['agentid']))->setInc('money',intval($indent['amount'])); M('Agent')->where(array('id'=>$indent['agentid']))->setInc('moneybalance',intval($indent['amount'])); $back=M('Agent_expenserecords')->where(array('id'=>$indent['id']))->setField('status',1); // if($back!=false){ $this->success('充值成功',U('Agent/Basic/expenseRecords')); }else{ $this->error('充值失败,请在线客服,为您处理',U('Agent/Basic/expenseRecords')); } }else{ $this->error('订单不存在',U('Agent/Basic/expenseRecords')); } }else { exit('付款失败'); } }
*2010-11-20 */ //--------------------------------------------------------- //财付通即时到帐支付页面回调示例,商户按照此文档进行开发即可 //--------------------------------------------------------- require_once dirname(__FILE__) . '/./responsehandler.class.php'; //require_once dirname(__FILE__).'./../../framwork/MooPHP.php'; require_once dirname(__FILE__) . '/./config.php'; require_once dirname(__FILE__) . '/./function.php'; date_default_timezone_set("Asia/Shanghai"); global $payment_code, $paymoney; $payment = $payment_code['tenpay']; /* 密钥 */ $key = $payment['tenpay_key']; /* 创建支付应答对象 */ $resHandler = new ResponseHandler(); $resHandler->setKey($key); //attach -1:铂金会员 0:钻石会员 1:高级会员 2:城市之星 $attach = $resHandler->getParameter("attach"); //判断签名 if ($resHandler->isTenpaySign()) { //状态码 0-成功 $retcode = $resHandler->getParameter("retcode"); //通知id $notify_id = $resHandler->getParameter("notify_id"); //商户订单号 $out_trade_no = $resHandler->getParameter("out_trade_no"); //财付通订单号 $transaction_id = $resHandler->getParameter("transaction_id"); //金额,以分为单位 $total_fee = $resHandler->getParameter("total_fee");
public function houtai() { $pay_type = $this->db->GetOne("SELECT * from `@#_pay` where `pay_class` = 'tenpay' and `pay_start` = '1'"); $pay_type_key = unserialize($pay_type['pay_key']); $key = $pay_type_key['key']['val']; //支付KEY $partner = $pay_type_key['id']['val']; //支付商号ID /* 创建支付应答对象 */ $resHandler = new ResponseHandler(); $resHandler->setKey($key); //判断签名 if (!$resHandler->isTenpaySign()) { echo "认证签名失败"; exit; } //通知ID $notify_id = $resHandler->getParameter("notify_id"); //通过通知ID查询,确保通知来至财付通 //创建查询请求 $queryReq = new RequestHandler(); $queryReq->init(); $queryReq->setKey($key); $queryReq->setGateUrl("https://gw.tenpay.com/gateway/simpleverifynotifyid.xml"); $queryReq->setParameter("partner", $partner); $queryReq->setParameter("notify_id", $notify_id); //通信对象 $httpClient = new TenpayHttpClient(); $httpClient->setTimeOut(5); //设置请求内容 $httpClient->setReqContent($queryReq->getRequestURL()); //后台调用 if ($httpClient->call()) { //设置结果参数 $queryRes = new ClientResponseHandler(); $queryRes->setContent($httpClient->getResContent()); $queryRes->setKey($key); } else { echo "通信失败"; exit; } //及时到账 if ($resHandler->getParameter("trade_mode") == "1") { //只有签名正确,retcode为0,trade_state为0才是支付成功 if ($queryRes->isTenpaySign() && $queryRes->getParameter("retcode") == "0" && $resHandler->getParameter("trade_state") == "0") { //log_result("即时到帐验签ID成功"); //取结果参数做业务处理 $out_trade_no = $resHandler->getParameter("out_trade_no"); //财付通订单号 $transaction_id = $resHandler->getParameter("transaction_id"); //金额,以分为单位 $total_fee = $resHandler->getParameter("total_fee"); //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee $discount = $resHandler->getParameter("discount"); //------------------------------ //处理业务开始 //------------------------------ //处理数据库逻辑 //注意交易单不要重复处理 //注意判断返回金额 $total_fee_t = $total_fee / 100; $this->db->Autocommit_start(); $dingdaninfo = $this->db->GetOne("select * from `@#_member_addmoney_record` where `code` = '{$out_trade_no}' and `money` = '{$total_fee_t}' and `status` = '未付款' for update"); if (!$dingdaninfo) { echo "fail"; exit; } $time = time(); $up_q1 = $this->db->Query("UPDATE `@#_member_addmoney_record` SET `pay_type` = '财付通', `status` = '已付款' where `id` = '{$dingdaninfo['id']}' and `code` = '{$dingdaninfo['code']}'"); $up_q2 = $this->db->Query("UPDATE `@#_member` SET `money` = `money` + {$total_fee_t} where (`uid` = '{$dingdaninfo['uid']}')"); $up_q3 = $this->db->Query("INSERT INTO `@#_member_account` (`uid`, `type`, `pay`, `content`, `money`, `time`) VALUES ('{$dingdaninfo['uid']}', '1', '账户', '充值', '{$total_fee_t}', '{$time}')"); if ($up_q1 && $up_q2 && $up_q3) { $this->db->Autocommit_commit(); } else { $this->db->Autocommit_rollback(); echo "fail"; exit; } if (empty($dingdaninfo['scookies'])) { echo "success"; exit; } $uid = $dingdaninfo['uid']; $scookies = unserialize($dingdaninfo['scookies']); $pay = System::load_app_class('pay', 'pay'); $pay->scookie = $scookies; $ok = $pay->init($uid, $pay_type['pay_id'], 'go_record'); //闪购商品 if ($ok != 'ok') { _setcookie('Cartlist', NULL); echo "fail"; exit; //商品购买失败 } $check = $pay->go_pay(1); if ($check) { $this->db->Query("UPDATE `@#_member_addmoney_record` SET `scookies` = '1' where `code` = '{$out_trade_no}' and `status` = '已付款'"); _setcookie('Cartlist', NULL); echo "success"; exit; } else { echo "fail"; exit; } //------------------------------ //处理业务完毕 //------------------------------ //log_result("即时到帐后台回调成功"); } else { echo "fail"; } } else { //通信失败 //echo "fail"; //后台调用通信失败,写日志,方便定位问题 //echo "<br>call err:" . $httpClient->getResponseCode() ."," . $httpClient->getErrInfo() . "<br>"; } }
function trade_notifycheck($type) { global $_G; if (DISCUZ_TENPAY_DIRECT && $type == 'credit') { $resHandler = new ResponseHandler(); $resHandler->setKey(DISCUZ_SECURITYCODE); $resHandler->setParameter("pay_time", ""); } else { $resHandler = new MediPayResponseHandler(); $resHandler->setKey(DISCUZ_TENPAY_OPENTRANS_KEY); } if ($type == 'credit') { if (DISCUZ_TENPAY_DIRECT && $resHandler->isTenpaySign() && DISCUZ_PARTNER == $_G['gp_bargainor_id']) { return array('validator' => !$_G['gp_pay_result'], 'order_no' => $_G['gp_sp_billno'], 'trade_no' => $_G['gp_transaction_id'], 'price' => $_G['gp_total_fee'] / 100, 'bargainor_id' => $_G['gp_bargainor_id'], 'location' => true); } elseif (!DISCUZ_TENPAY_DIRECT && $resHandler->isTenpaySign()) { return array('validator' => $resHandler->getParameter('retcode') == '0', 'order_no' => $resHandler->getParameter('mch_vno'), 'trade_no' => $resHandler->getParameter('cft_tid'), 'price' => $resHandler->getParameter('total_fee') / 100.0, 'status' => $resHandler->getParameter('status'), 'location' => true); } } elseif ($type == 'trade') { if ($resHandler->isTenpaySign()) { return array('validator' => $resHandler->getParameter('retcode') == '0', 'order_no' => $resHandler->getParameter('mch_vno'), 'trade_no' => $resHandler->getParameter('cft_tid'), 'price' => $resHandler->getParameter('total_fee') / 100.0, 'status' => $resHandler->getParameter('status'), 'location' => true); } } else { return array('validator' => FALSE, 'location' => 'forum.php?mod=memcp&action=credits&operation=addfunds&return=fail'); } }
function trade_notifycheck($type) { global $_G; if ($type == 'credit' || $type == 'invite') { if (!DISCUZ_SECURITYCODE) { exit('Access Denied'); } $resHandler = new ResponseHandler(); $resHandler->setKey(DISCUZ_SECURITYCODE); $resHandler->setParameter("bankname", ""); } else { if (!DISCUZ_TENPAY_OPENTRANS_KEY) { exit('Access Denied'); } $resHandler = new MediPayResponseHandler(); $resHandler->setKey(DISCUZ_TENPAY_OPENTRANS_KEY); } if ($type == 'credit' || $type == 'invite') { if ($resHandler->isTenpaySign() && DISCUZ_PARTNER == $_GET['partner']) { return array('validator' => !$_GET['trade_state'], 'order_no' => $_GET['out_trade_no'], 'trade_no' => $_GET['transaction_id'], 'price' => $_GET['total_fee'] / 100, 'bargainor_id' => $_GET['partner'], 'location' => true); } } elseif ($type == 'trade') { if ($resHandler->isTenpaySign()) { return array('validator' => $resHandler->getParameter('retcode') == '0', 'order_no' => $resHandler->getParameter('mch_vno'), 'trade_no' => $resHandler->getParameter('cft_tid'), 'price' => $resHandler->getParameter('total_fee') / 100.0, 'status' => $resHandler->getParameter('status'), 'location' => true); } } else { return array('validator' => FALSE, 'location' => 'forum.php?mod=memcp&action=credits&operation=addfunds&return=fail'); } }
public function notify($request) { // $url = "http://o2o.7dit.com/tenpay.php?"; // foreach($_REQUEST as $k=>$v) // { // $url.=$k."=".$v."&"; // } // $str = file_get_contents(APP_ROOT_PATH."log.txt")."\n".print_r($_REQUEST,1)."\n".$url; // @file_put_contents(APP_ROOT_PATH."log.txt", $str); require_once APP_ROOT_PATH . "system/payment/tenpayc2c/ResponseHandler.class.php"; require_once APP_ROOT_PATH . "system/payment/tenpayc2c/RequestHandler.class.php"; require_once APP_ROOT_PATH . "system/payment/tenpayc2c/TenpayHttpClient.class.php"; require_once APP_ROOT_PATH . "system/payment/tenpayc2c/ClientResponseHandler.class.php"; $return_res = array('info' => '', 'status' => false); $payment = $GLOBALS['db']->getRow("select id,config from " . DB_PREFIX . "payment where class_name='tenpayc2c'"); $payment['config'] = unserialize($payment['config']); /* 创建支付应答对象 */ $resHandler = new ResponseHandler(); $resHandler->setKey($payment['config']['tencentpay_key']); //判断签名 if ($resHandler->isTenpaySign()) { //通知id // error_reporting(E_ALL); // ini_set("display_errors",1); $notify_id = $resHandler->getParameter("notify_id"); //通过通知ID查询,确保通知来至财付通 //创建查询请求 $queryReq = new RequestHandler(); $queryReq->init(); $queryReq->setKey($payment['config']['tencentpay_key']); $queryReq->setGateUrl("https://gw.tenpay.com/gateway/simpleverifynotifyid.xml"); $queryReq->setParameter("partner", $payment['config']['tencentpay_id']); $queryReq->setParameter("notify_id", $notify_id); //通信对象 $httpClient = new TenpayHttpClient(); $httpClient->setTimeOut(5); //设置请求内容 $httpClient->setReqContent($queryReq->getRequestURL()); //后台调用 if ($httpClient->call()) { //设置结果参数 $queryRes = new ClientResponseHandler(); $queryRes->setContent($httpClient->getResContent()); $queryRes->setKey($payment['config']['tencentpay_key']); if ($resHandler->getParameter("trade_mode") == "2") { //判断签名及结果(中介担保) //只有签名正确,retcode为0,trade_state为0才是支付成功 // print_r($queryRes); if ($queryRes->isTenpaySign() && $queryRes->getParameter("retcode") == "0") { //取结果参数做业务处理 $out_trade_no = $resHandler->getParameter("out_trade_no"); //财付通订单号 $transaction_id = $resHandler->getParameter("transaction_id"); //金额,以分为单位 $total_fee = $resHandler->getParameter("total_fee"); //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee $discount = $resHandler->getParameter("discount"); //------------------------------ //处理业务开始 //------------------------------ //处理数据库逻辑 //注意交易单不要重复处理 //注意判断返回金额 if ($resHandler->getParameter("trade_state") == "0" || $resHandler->getParameter("trade_state") == '5' || $resHandler->getParameter("status") == "3") { $payment_notice = $GLOBALS['db']->getRow("select * from " . DB_PREFIX . "payment_notice where notice_sn = '" . $out_trade_no . "'"); $order_info = $GLOBALS['db']->getRow("select * from " . DB_PREFIX . "deal_order where id = " . $payment_notice['order_id']); require_once APP_ROOT_PATH . "system/libs/cart.php"; $GLOBALS['db']->query("update " . DB_PREFIX . "payment_notice set outer_notice_sn = '" . $transaction_id . "' where id = " . $payment_notice['id']); $rs = payment_paid($payment_notice['id']); if ($rs) { order_paid($payment_notice['order_id']); echo "success"; } else { echo 'fail'; } } else { echo "success"; } } else { //错误时,返回结果可能没有签名,写日志trade_state、retcode、retmsg看失败详情。 //echo "验证签名失败 或 业务错误信息:trade_state=" . $resHandler->getParameter("trade_state") . ",retcode=" . $queryRes-> getParameter("retcode"). ",retmsg=" . $queryRes->getParameter("retmsg") . "<br/>" ; echo "fail"; } } //获取查询的debug信息,建议把请求、应答内容、debug信息,通信返回码写入日志,方便定位问题 /* echo "<br>------------------------------------------------------<br>"; echo "http res:" . $httpClient->getResponseCode() . "," . $httpClient->getErrInfo() . "<br>"; echo "query req:" . htmlentities($queryReq->getRequestURL(), ENT_NOQUOTES, "GB2312") . "<br><br>"; echo "query res:" . htmlentities($queryRes->getContent(), ENT_NOQUOTES, "GB2312") . "<br><br>"; echo "query reqdebug:" . $queryReq->getDebugInfo() . "<br><br>" ; echo "query resdebug:" . $queryRes->getDebugInfo() . "<br><br>"; */ } else { //通信失败 echo "fail"; //后台调用通信失败,写日志,方便定位问题 echo "<br>call err:" . $httpClient->getResponseCode() . "," . $httpClient->getErrInfo() . "<br>"; } } else { header("Content-Type:text/html; charset=utf-8"); echo "<br/>" . "认证签名失败" . "<br/>"; echo $resHandler->getDebugInfo() . "<br>"; } }
public function tenpaynotice() { require_once C('APP_ROOT') . "Lib/Pay/Tenpay/ResponseHandler.class.php"; require_once C('APP_ROOT') . "Lib/Pay/Tenpay/RequestHandler.class.php"; require_once C('APP_ROOT') . "Lib/Pay/Tenpay/client/ClientResponseHandler.class.php"; require_once C('APP_ROOT') . "Lib/Pay/Tenpay/client/TenpayHttpClient.class.php"; /* 创建支付应答对象 */ $resHandler = new ResponseHandler(); $resHandler->setKey($this->payConfig['tenpay']['mkey']); //Log::write('tenpay notice:'.print_r($resHandler->getAllParameters(), true), Log::DEBUG); //判断签名 if ($resHandler->isTenpaySign()) { //通知id $notify_id = $resHandler->getParameter("notify_id"); $tenpay_params = C('TENPAY_PARAMS'); //通过通知ID查询,确保通知来至财付通 //创建查询请求 $queryReq = new RequestHandler(); $queryReq->init(); $queryReq->setKey($this->payConfig['tenpay']['mkey']); $queryReq->setGateUrl($tenpay_params["VERIFY_URL"]); $queryReq->setParameter("partner", $this->payConfig['tenpay']['MerCode']); $queryReq->setParameter("notify_id", $notify_id); $queryReq->setParameter("input_charset", "UTF-8"); //通信对象 $httpClient = new TenpayHttpClient(); $httpClient->setTimeOut(5); //设置请求内容 $httpClient->setReqContent($queryReq->getRequestURL()); //后台调用 if ($httpClient->call()) { //设置结果参数 $queryRes = new ClientResponseHandler(); $queryRes->setContent($httpClient->getResContent()); $queryRes->setKey($this->payConfig['tenpay']['mkey']); //判断签名及结果 //只有签名正确,retcode为0,trade_state为0才是支付成功 if ($queryRes->isTenpaySign() && $queryRes->getParameter("retcode") == "0" && $queryRes->getParameter("trade_state") == "0" && $queryRes->getParameter("trade_mode") == "1") { //取结果参数做业务处理 $out_trade_no = $queryRes->getParameter("out_trade_no"); //财付通订单号 $transaction_id = $queryRes->getParameter("transaction_id"); //金额,以分为单位 $total_fee = $queryRes->getParameter("total_fee"); //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee $discount = $queryRes->getParameter("discount"); //------------------------------ //处理业务开始 //------------------------------ //处理数据库逻辑 //注意交易单不要重复处理 //注意判断返回金额 $nid = $this->createnid("tenpay", $out_trade_no); $done = $this->payDone(1, $nid, $transaction_id, "total_fee:" . $total_fee); //------------------------------ //处理业务完毕 //------------------------------ echo "success"; } else { //错误时,返回结果可能没有签名,写日志trade_state、retcode、retmsg看失败详情。 //echo "验证签名失败 或 业务错误信息:trade_state=" . $queryRes->getParameter("trade_state") . ",retcode=" . $queryRes->getParameter("retcode"). ",retmsg=" . $queryRes->getParameter("retmsg") . "<br/>" ; $out_trade_no = $resHandler->getParameter("out_trade_no"); $nid = $this->createnid("tenpay", $out_trade_no); $done = $this->payDone(3, $nid, "", print_r($queryRes->getAllParameters(), true)); echo "fail"; } } else { // $out_trade_no = $resHandler->getParameter("out_trade_no"); // $nid = $this->createnid( "tenpay", $out_trade_no); // $done = $this->payDone(3,$nid, "", print_r($resHandler->getAllParameters(), true)); //通信失败 echo "fail"; //后台调用通信失败,写日志,方便定位问题 //echo "<br>call err:" . $httpClient->getResponseCode() ."," . $httpClient->getErrInfo() . "<br>"; Log::write("tenpay notice:<br>call err:" . $httpClient->getResponseCode() . "," . $httpClient->getErrInfo(), Log::DEBUG); } } else { $out_trade_no = $resHandler->getParameter("out_trade_no"); $transaction_id = $resHandler->getParameter("transaction_id"); $nid = $this->createnid("tenpay", $out_trade_no); $done = $this->payDone(2, $nid, $transaction_id, print_r($resHandler->getAllParameters(), true)); //回调签名错误 echo "fail"; } }
public function notify($request) { unset($_POST['city']); unset($_GET['city']); require APP_ROOT_PATH . "system/payment/TenpayBank/classes/ResponseHandler.class.php"; require APP_ROOT_PATH . "system/payment/TenpayBank/classes/function.php"; $return_res = array('info' => '', 'status' => false); $payment = $GLOBALS['db']->getRow("select id,config from " . DB_PREFIX . "payment where class_name='TenpayBank'"); $payment['config'] = unserialize($payment['config']); $resHandler = new ResponseHandler(); $resHandler->setKey($payment['config']['tencentpay_key']); //判断签名 if ($resHandler->isTenpaySign()) { //通知id $notify_id = $resHandler->getParameter("notify_id"); //商户订单号 $out_trade_no = $resHandler->getParameter("out_trade_no"); //财付通订单号 $transaction_id = $resHandler->getParameter("transaction_id"); //金额,以分为单位 $total_fee = $resHandler->getParameter("total_fee"); //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee $discount = $resHandler->getParameter("discount"); //支付结果 $trade_state = $resHandler->getParameter("trade_state"); //交易模式,1即时到账 $trade_mode = $resHandler->getParameter("trade_mode"); $payment_notice = $GLOBALS['db']->getRow("select * from " . DB_PREFIX . "payment_notice where notice_sn = '" . $out_trade_no . "'"); $order_info = $GLOBALS['db']->getRow("select * from " . DB_PREFIX . "deal_order where id = " . $payment_notice['order_id']); require_once APP_ROOT_PATH . "system/model/cart.php"; $GLOBALS['db']->query("update " . DB_PREFIX . "payment_notice set outer_notice_sn = '" . $out_trade_no . "' where id = " . $payment_notice['id']); $rs = payment_paid($payment_notice['id']); if ($rs) { $rs = order_paid($payment_notice['order_id']); if ($rs) { echo "success"; } else { echo "success"; } } else { echo "fail"; } } else { echo "fail"; } }
/** * POST接收数据 * 状态码说明 (0 交易完成 1 交易失败 2 交易超时 3 交易处理中 4 交易未支付 5交易取消 6交易发生错误) */ public function notify() { /* 创建支付应答对象 */ $resHandler = new ResponseHandler(); $resHandler->setKey($this->config['key']); //判断签名 if ($resHandler->isTenpaySign()) { //通知id $notify_id = $resHandler->getParameter("notify_id"); //通过通知ID查询,确保通知来至财付通 //创建查询请求 $queryReq = new RequestHandler(); $queryReq->init(); $queryReq->setKey($this->config['key']); $queryReq->setGateUrl("https://gw.tenpay.com/gateway/simpleverifynotifyid.xml"); $queryReq->setParameter("partner", $this->config['partner']); $queryReq->setParameter("notify_id", $notify_id); //通信对象 $httpClient = new TenpayHttpClient(); $httpClient->setTimeOut(5); //设置请求内容 $httpClient->setReqContent($queryReq->getRequestURL()); //后台调用 if ($httpClient->call()) { //设置结果参数 $queryRes = new ClientResponseHandler(); $queryRes->setContent($httpClient->getResContent()); $queryRes->setKey($this->config['key']); if ($resHandler->getParameter("trade_mode") == "1") { //判断签名及结果(即时到帐) //只有签名正确,retcode为0,trade_state为0才是支付成功 if ($queryRes->isTenpaySign() && $queryRes->getParameter("retcode") == "0" && $resHandler->getParameter("trade_state") == "0") { $return_data['order_id'] = $resHandler->getParameter("out_trade_no"); $return_data['price'] = dround($resHandler->getParameter("total_fee") / 100); $return_data['account'] = $resHandler->getParameter("partner"); $return_data['order_status'] = 0; return $return_data; } else { //错误时,返回结果可能没有签名,写日志trade_state、retcode、retmsg看失败详情。 //echo "验证签名失败 或 业务错误信息:trade_state=" . $resHandler->getParameter("trade_state") . ",retcode=" . $queryRes-> getParameter("retcode"). ",retmsg=" . $queryRes->getParameter("retmsg") . "<br/>" ; error_log(date('m-d H:i:s') . '| POST: ' . $queryRes->getParameter("retmsg") . ' |' . "\r\n", 3, LOG_PATH . 'tenpay_error_log.php'); return false; } } elseif ($resHandler->getParameter("trade_mode") == "2") { //判断签名及结果(中介担保) //只有签名正确,retcode为0,trade_state为0才是支付成功 if ($queryRes->isTenpaySign() && $queryRes->getParameter("retcode") == "0") { $return_data['order_id'] = $resHandler->getParameter("out_trade_no"); $return_data['price'] = dround($resHandler->getParameter("total_fee") / 100); $return_data['account'] = $resHandler->getParameter("partner"); switch ($resHandler->getParameter("trade_state")) { case 0: $return_data['order_status'] = 3; break; case 1: $return_data['order_status'] = 4; break; case 2: $return_data['order_status'] = 4; break; case 4: $return_data['order_status'] = 3; break; case 5: $return_data['order_status'] = 0; break; case 6: $return_data['order_status'] = 5; break; case 7: $return_data['order_status'] = 3; break; case 8: $return_data['order_status'] = 3; break; case 9: $return_data['order_status'] = 5; break; case 10: $return_data['order_status'] = 5; break; default: $return_data['order_status'] = 5; } return $return_data; } else { //错误时,返回结果可能没有签名,写日志trade_state、retcode、retmsg看失败详情。 //echo "验证签名失败 或 业务错误信息:trade_state=" . $resHandler->getParameter("trade_state") . ",retcode=" . $queryRes-> getParameter("retcode"). ",retmsg=" . $queryRes->getParameter("retmsg") . "<br/>" ; error_log(date('m-d H:i:s') . '| POST: ' . $queryRes->getParameter("retmsg") . ' |' . "\r\n", 3, LOG_PATH . 'tenpay_error_log.php'); return false; } } //获取查询的debug信息,建议把请求、应答内容、debug信息,通信返回码写入日志,方便定位问题 /* echo "<br>------------------------------------------------------<br>"; echo "http res:" . $httpClient->getResponseCode() . "," . $httpClient->getErrInfo() . "<br>"; echo "query req:" . htmlentities($queryReq->getRequestURL(), ENT_NOQUOTES, "GB2312") . "<br><br>"; echo "query res:" . htmlentities($queryRes->getContent(), ENT_NOQUOTES, "GB2312") . "<br><br>"; echo "query reqdebug:" . $queryReq->getDebugInfo() . "<br><br>" ; echo "query resdebug:" . $queryRes->getDebugInfo() . "<br><br>"; */ } else { error_log(date('m-d H:i:s') . '| POST: ' . $httpClient->getErrInfo() . ' |' . "\r\n", 3, LOG_PATH . 'tenpay_error_log.php'); return false; } } else { error_log(date('m-d H:i:s') . '| POST: ' . $resHandler->getDebugInfo() . ' |' . "\r\n", 3, LOG_PATH . 'tenpay_error_log.php'); return false; } }
private function yanzheng() { require_once TENPAY_PATH . "/lib/classes/ResponseHandler.class.php"; require_once TENPAY_PATH . "/lib/classes/function.php"; require_once TENPAY_PATH . "/lib/tenpay_config.php"; log_result("进入前台回调页面"); /* 创建支付应答对象 */ $resHandler = new ResponseHandler(); $resHandler->setKey($key); //判断签名 if ($resHandler->isTenpaySign()) { return $resHandler; } else { return false; } }
if (!$PAY[$bank]['partnerid']) { exit('fail'); } if (strlen($PAY[$bank]['keycode']) < 10) { exit('fail'); } $receive_url = ''; require DT_ROOT . '/api/pay/' . $bank . '/ResponseHandler.class.php'; require DT_ROOT . '/api/pay/' . $bank . '/RequestHandler.class.php'; require DT_ROOT . '/api/pay/' . $bank . '/ClientResponseHandler.class.php'; require DT_ROOT . '/api/pay/' . $bank . '/TenpayHttpClient.class.php'; require DT_ROOT . '/api/pay/' . $bank . '/function.php'; require DT_ROOT . '/api/pay/' . $bank . '/config.inc.php'; #log_result("进入后台回调页面"); /* 创建支付应答对象 */ $resHandler = new ResponseHandler(); $resHandler->setKey($key); //判断签名 if ($resHandler->isTenpaySign()) { //通知id $notify_id = $resHandler->getParameter("notify_id"); //通过通知ID查询,确保通知来至财付通 //创建查询请求 $queryReq = new RequestHandler(); $queryReq->init(); $queryReq->setKey($key); $queryReq->setGateUrl("https://gw.tenpay.com/gateway/simpleverifynotifyid.xml"); $queryReq->setParameter("partner", $partner); $queryReq->setParameter("notify_id", $notify_id); //通信对象 $httpClient = new TenpayHttpClient();
public function isTenpaySign() { $keysArr = array("ver", "charset", "bank_type", "bank_billno", "pay_result", "pay_info", "purchase_alias", "bargainor_id", "transaction_id", "sp_billno", "total_fee", "fee_type", "attach", "time_end"); return parent::isTenpaySign($keysArr); }
<META http-equiv=Content-Type content="text/html; charset=utf-8"> <?php //--------------------------------------------------------- //财付通即时到帐支付页面回调示例,商户按照此文档进行开发即可 //--------------------------------------------------------- require_once "./classes/ResponseHandler.class.php"; require_once "./classes/function.php"; require_once "./tenpay_config.php"; //log_result("进入前台回调页面"); /* 创建支付应答对象 */ $resHandler = new ResponseHandler(); $resHandler->setKey($key); //判断签名 if ($resHandler->isTenpaySign()) { //通知id $notify_id = $resHandler->getParameter("notify_id"); //商户订单号 $out_trade_no = $resHandler->getParameter("out_trade_no"); //财付通订单号 $transaction_id = $resHandler->getParameter("transaction_id"); //金额,以分为单位 $total_fee = $resHandler->getParameter("total_fee"); //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee $discount = $resHandler->getParameter("discount"); //支付结果 $trade_state = $resHandler->getParameter("trade_state"); //交易模式,1即时到账 $trade_mode = $resHandler->getParameter("trade_mode"); if ("1" == $trade_mode) { if ("0" == $trade_state) { echo "<br/>" . (double) $total_fee / 100 . "元充值成功!" . "<br/>";
function endPay($PassageInfo, $OrderInfo) { /* 商户号 */ $partner = $PassageInfo['StagePartnerId']; /* 密钥 */ $key = $PassageInfo['StageSecureCode']; /* 创建支付应答对象 */ $resHandler = new ResponseHandler(); $resHandler->setKey($key); //判断签名 if ($resHandler->isTenpaySign()) { //通知id $notify_id = $resHandler->getParameter("notify_id"); //通过通知ID查询,确保通知来至财付通 //创建查询请求 $queryReq = new RequestHandler(); $queryReq->init(); $queryReq->setKey($key); $queryReq->setGateUrl("https://gw.tenpay.com/gateway/verifynotifyid.xml"); $queryReq->setParameter("partner", $partner); $queryReq->setParameter("notify_id", $notify_id); //通信对象 $httpClient = new TenpayHttpClient(); $httpClient->setTimeOut(5); //设置请求内容 $httpClient->setReqContent($queryReq->getRequestURL()); //后台调用 if ($httpClient->call()) { //设置结果参数 $queryRes = new ClientResponseHandler(); $queryRes->setContent($httpClient->getResContent()); $queryRes->setKey($key); //判断签名及结果 //只有签名正确,retcode为0,trade_state为0才是支付成功 //echo "sign:".$queryRes->isTenpaySign().",retcode:".$queryRes->getParameter("retcode").",trade_state:".$queryRes->getParameter("trade_state").",trade_mode:".$queryRes->getParameter("trade_mode")."<br>"; if ($queryRes->isTenpaySign() && $queryRes->getParameter("retcode") == "0" && $queryRes->getParameter("trade_state") == "0" && $queryRes->getParameter("trade_mode") == "1") { //取结果参数做业务处理 $out_trade_no = $queryRes->getParameter("out_trade_no"); //财付通订单号 $transaction_id = $queryRes->getParameter("transaction_id"); //金额,以分为单位 $total_fee = $queryRes->getParameter("total_fee"); //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee $discount = $queryRes->getParameter("discount"); if ($OrderInfo['OrderId'] == $out_trade_no && $total_fee == $OrderInfo['Coin'] * 100) { $Pay['OrderId'] = $OrderInfo['OrderId']; $Pay['PayUserId'] = $OrderInfo['PayUserId']; $Pay['AcceptUserId'] = $OrderInfo['AcceptUserId']; $Pay['AppId'] = $OrderInfo['AppId']; $Pay['PartnerId'] = $OrderInfo['PartnerId']; $Pay['PassageId'] = $OrderInfo['PassageId']; $Pay['SubPassageId'] = $OrderInfo['SubPassageId']; $Pay['Amount'] = $OrderInfo['Amount']; $Pay['Coin'] = $OrderInfo['Coin']; $Pay['Credit'] = $OrderInfo['Credit']; $Pay['PayIP'] = $OrderInfo['PayIP']; $Pay['PayTime'] = $OrderInfo['PayTime']; $Pay['PayedTime'] = strtotime($queryRes->getParameter("time_end")); $Pay['UserSourceId'] = $OrderInfo['UserSourceId']; $Pay['UserSourceDetail'] = $OrderInfo['UserSourceDetail']; $Pay['UserSourceProjectId'] = $OrderInfo['UserSourceProjectId']; $Pay['UserSourceActionId'] = $OrderInfo['UserSourceActionId']; $Pay['UserRegTime'] = $OrderInfo['UserRegTime']; $Pay['StageOrder'] = $transaction_id; $Pay['comment'] = json_encode(array('bank_info' => 'bank_type' != "DEFAULT" ? $queryRes->getParameter("bank_type") . "|" . $queryRes->getParameter("bank_billno") : "DEFAULT")); return $Pay; } else { return false; } //------------------------------ //处理业务开始 //------------------------------ //处理数据库逻辑 //注意交易单不要重复处理 //注意判断返回金额 //------------------------------ //处理业务完毕 //------------------------------ echo "success"; } else { //错误时,返回结果可能没有签名,写日志trade_state、retcode、retmsg看失败详情。 //echo "验证签名失败 或 业务错误信息:trade_state=" . $queryRes->getParameter("trade_state") . ",retcode=" . $queryRes->getParameter("retcode"). ",retmsg=" . $queryRes->getParameter("retmsg") . "<br/>" ; echo "1fail"; } //获取查询的debug信息,建议把请求、应答内容、debug信息,通信返回码写入日志,方便定位问题 /* echo "<br>------------------------------------------------------<br>"; echo "http res:" . $httpClient->getResponseCode() . "," . $httpClient->getErrInfo() . "<br>"; echo "query req:" . htmlentities($queryReq->getRequestURL(), ENT_NOQUOTES, "GB2312") . "<br><br>"; echo "query res:" . htmlentities($queryRes->getContent(), ENT_NOQUOTES, "GB2312") . "<br><br>"; echo "query reqdebug:" . $queryReq->getDebugInfo() . "<br><br>" ; echo "query resdebug:" . $queryRes->getDebugInfo() . "<br><br>"; */ } else { //通信失败 echo "2fail"; //后台调用通信失败,写日志,方便定位问题 //echo "<br>call err:" . $httpClient->getResponseCode() ."," . $httpClient->getErrInfo() . "<br>"; } } else { //回调签名错误 echo "3fail"; //echo "<br>签名失败<br>"; } //获取debug信息,建议把debug信息写入日志,方便定位问题 //echo $resHandler->getDebugInfo() . "<br>"; }
public function charge_return (){ import("@.ORG.TenpayComputer.ResponseHandler"); $resHandler = new ResponseHandler(); $key=trim(C('tenpay_partnerkey')); $resHandler->setKey($key); $out_trade_no = $this->_get('out_trade_no'); //if($resHandler->isTenpaySign()) { $notify_id = $resHandler->getParameter("notify_id"); //商户订单号 $out_trade_no = $resHandler->getParameter("out_trade_no"); //财付通订单号 $transaction_id = $resHandler->getParameter("transaction_id"); //金额,以分为单位 $total_fee = $resHandler->getParameter("total_fee"); //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee $discount = $resHandler->getParameter("discount"); //支付结果 $trade_state = $resHandler->getParameter("trade_state"); //交易模式,1即时到账 $trade_mode = $resHandler->getParameter("trade_mode"); if("0" == $trade_state) { $total_fee=$total_fee/100; $indent=M('Indent')->where(array('indent_id'=>$out_trade_no))->find(); if($indent!=false){ if($indent['status']==1){$this->error('该订单已经处理过,请勿重复操作');} M('Users')->where(array('id'=>$indent['uid']))->setInc('money',intval($indent['price'])); M('Users')->where(array('id'=>$indent['uid']))->setInc('moneybalance',intval($indent['price'])); $back=M('Indent')->where(array('id'=>$indent['id']))->setField('status',1); if($back!=false){ $this->success('充值成功',U('User/Index/index')); }else{ $this->error('充值失败,请在线客服,为您处理',U('User/Index/index')); } }else{ $this->error('订单不存在',U('User/Index/index')); } }else { exit('付款失败'); } }
public function return_url() { import('@.ORG.TenpayComputer.ResponseHandler'); $resHandler = new ResponseHandler(); $key = $this->payConfig['partnerkey']; $resHandler->setKey($key); $out_trade_no = $this->_get('out_trade_no'); $notify_id = $resHandler->getParameter('notify_id'); $out_trade_no = $resHandler->getParameter('out_trade_no'); $transaction_id = $resHandler->getParameter('transaction_id'); $total_fee = $resHandler->getParameter('total_fee'); $discount = $resHandler->getParameter('discount'); $trade_state = $resHandler->getParameter('trade_state'); $trade_mode = $resHandler->getParameter('trade_mode'); if ('0' == $trade_state) { $payHandel = new payHandle($_GET['token'], $_GET['from'], 'tenpayComputer'); $orderInfo = $payHandel->afterPay($out_trade_no, $_GET['transaction_id']); $from = $payHandel->getFrom(); $this->redirect('/index.php?g=Wap&m=' . $from . '&a=payReturn&token=' . $orderInfo['token'] . '&wecha_id=' . $orderInfo['wecha_id'] . '&orderid=' . $out_trade_no); } else { exit('付款失败'); } }
private function handle(ResponseHandler $obj) { if ($obj->getStatusNumber($this) != 200) { header($_SERVER["SERVER_PROTOCOL"] . " " . $obj->getStatus($this)); // FastCGI, blecch header("Status: " . $obj->getStatus($this)); $_SERVER['REDIRECT_STATUS'] = $obj->getStatusNumber($this); // end FastCGI } $ret = $obj->getResponse($this); if ($ret instanceof ResponseHandler) { $this->handle($ret); } else { json_response($ret); } }
<?php //--------------------------------------------------------- //财付通即时到帐支付后台回调示例,商户按照此文档进行开发即可 //--------------------------------------------------------- require "classes/ResponseHandler.class.php"; require "classes/RequestHandler.class.php"; require "classes/client/ClientResponseHandler.class.php"; require "classes/client/TenpayHttpClient.class.php"; /* 商户号 */ $partner = "1900000109"; /* 密钥 */ $key = "8934e7d15453e97507ef794cf7b0519d"; /* 创建支付应答对象 */ $resHandler = new ResponseHandler(); $resHandler->setKey($key); //判断签名 if ($resHandler->isTenpaySign()) { //通知id $notify_id = $resHandler->getParameter("notify_id"); //通过通知ID查询,确保通知来至财付通 //创建查询请求 $queryReq = new RequestHandler(); $queryReq->init(); $queryReq->setKey($key); $queryReq->setGateUrl("https://gw.tenpay.com/gateway/verifynotifyid.xml"); $queryReq->setParameter("partner", $partner); $queryReq->setParameter("notify_id", $notify_id); //通信对象 $httpClient = new TenpayHttpClient(); $httpClient->setTimeOut(5);
public function notify_url() { $partner = CS_Tenpay_ID; $key = CS_Tenpay_Key; require CSCMSPATH . "pay/tenpay/ResponseHandler.class.php"; require CSCMSPATH . "pay/tenpay/RequestHandler.class.php"; require CSCMSPATH . "pay/tenpay/client/ClientResponseHandler.class.php"; require CSCMSPATH . "pay/tenpay/client/TenpayHttpClient.class.php"; $resHandler = new ResponseHandler(); $resHandler->setKey($key); if ($resHandler->isTenpaySign()) { $notify_id = $resHandler->getParameter("notify_id"); $queryReq = new RequestHandler(); $queryReq->init(); $queryReq->setKey($key); $queryReq->setGateUrl("https://gw.tenpay.com/gateway/simpleverifynotifyid.xml"); $queryReq->setParameter("partner", $partner); $queryReq->setParameter("notify_id", $notify_id); $httpClient = new TenpayHttpClient(); $httpClient->setTimeOut(5); $httpClient->setReqContent($queryReq->getRequestURL()); if ($httpClient->call()) { $queryRes = new ClientResponseHandler(); $queryRes->setContent($httpClient->getResContent()); $queryRes->setKey($key); if ($resHandler->getParameter("trade_mode") == "1") { //判断签名及结果(即时到帐) if ($queryRes->isTenpaySign() && $queryRes->getParameter("retcode") == "0" && $resHandler->getParameter("trade_state") == "0") { $out_trade_no = $resHandler->getParameter("out_trade_no"); $transaction_id = $resHandler->getParameter("transaction_id"); $total_fee = $resHandler->getParameter("total_fee"); $discount = $resHandler->getParameter("discount"); //获取订单记录 $row = $this->CsdjDB->get_row('pay', '*', $out_trade_no, 'dingdan'); if ($row && $row->pid != 1) { //增加金钱 $this->db->query("update " . CS_SqlPrefix . "user set rmb=rmb+" . $row->rmb . " where id=" . $row->uid . ""); //改变状态 $this->db->query("update " . CS_SqlPrefix . "pay set pid=1 where id=" . $row->id . ""); //发送通知 $add['uida'] = $row->uid; $add['uidb'] = 0; $add['name'] = L('pay_11'); $add['neir'] = L('pay_17', array($row->rmb, $out_trade_no)); $add['addtime'] = time(); $this->CsdjDB->get_insert('msg', $add); } echo "success"; } else { echo "fail"; } } elseif ($resHandler->getParameter("trade_mode") == "2") { //判断签名及结果(中介担保) if ($queryRes->isTenpaySign() && $queryRes->getParameter("retcode") == "0") { $out_trade_no = $resHandler->getParameter("out_trade_no"); $transaction_id = $resHandler->getParameter("transaction_id"); $total_fee = $resHandler->getParameter("total_fee"); $discount = $resHandler->getParameter("discount"); $row = $this->CsdjDB->get_row('pay', '*', $out_trade_no, 'dingdan'); switch ($resHandler->getParameter("trade_state")) { case "0": //付款成功 if ($row) { $this->db->query("update " . CS_SqlPrefix . "pay set pid=2 where id=" . $row->id . ""); //发送通知 $add['uida'] = $row->uid; $add['uidb'] = 0; $add['name'] = L('pay_13'); $add['neir'] = L('pay_14', array($row->rmb, $out_trade_no)); $add['addtime'] = time(); $this->CsdjDB->get_insert('msg', $add); } break; case "1": //交易创建 break; case "2": //收获地址填写完毕 break; case "4": //卖家发货成功 if ($row) { $this->db->query("update " . CS_SqlPrefix . "pay set pid=3 where id=" . $row->id . ""); //发送通知 $add['uida'] = $row->uid; $add['uidb'] = 0; $add['name'] = L('pay_15'); $add['neir'] = L('pay_16', array($out_trade_no)); $add['addtime'] = time(); $this->CsdjDB->get_insert('msg', $add); } break; case "5": //买家收货确认,交易成功 if ($row && $row->pid != 1) { //增加金钱 $this->db->query("update " . CS_SqlPrefix . "user set rmb=rmb+" . $row->rmb . " where id=" . $row->uid . ""); //改变状态 $this->db->query("update " . CS_SqlPrefix . "pay set pid=1 where id=" . $row->id . ""); //发送通知 $add['uida'] = $row->uid; $add['uidb'] = 0; $add['name'] = L('pay_11'); $add['neir'] = L('pay_17', array($row->rmb, $out_trade_no)); $add['addtime'] = time(); $this->CsdjDB->get_insert('msg', $add); } break; case "6": //交易关闭,未完成超时关闭 break; case "7": //修改交易价格成功 break; case "8": //买家发起退款 break; case "9": //退款成功 break; case "10": //退款关闭 break; default: break; } echo "success"; } else { echo "fail"; } } } else { //通信失败 echo "fail"; } } else { echo "fail"; } }
public function return_url() { import("@.ORG.TenpayComputer.ResponseHandler"); $resHandler = new ResponseHandler(); $key = $this->payConfig['partnerkey']; $resHandler->setKey($key); $out_trade_no = $this->_get('out_trade_no'); //if($resHandler->isTenpaySign()) { $notify_id = $resHandler->getParameter("notify_id"); //商户订单号 $out_trade_no = $resHandler->getParameter("out_trade_no"); //财付通订单号 $transaction_id = $resHandler->getParameter("transaction_id"); //金额,以分为单位 $total_fee = $resHandler->getParameter("total_fee"); //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee $discount = $resHandler->getParameter("discount"); //支付结果 $trade_state = $resHandler->getParameter("trade_state"); //交易模式,1即时到账 $trade_mode = $resHandler->getParameter("trade_mode"); if ("0" == $trade_state) { //after $payHandel = new payHandle($_GET['token'], $_GET['from'], 'tenpayComputer'); $orderInfo = $payHandel->afterPay($out_trade_no); $from = $payHandel->getFrom(); // $this->redirect('/index.php?g=Wap&m=' . $from . '&a=payReturn&token=' . $orderInfo['token'] . '&wecha_id=' . $orderInfo['wecha_id'] . '&orderid=' . $out_trade_no); } else { exit('付款失败'); } //}else { //exit('sign error'); // } }
public function web_return() { unset($_GET["pay_type"]); import("@.ORG.pay.TenpayComputer.ResponseHandler"); $resHandler = new ResponseHandler(); $resHandler->setKey($this->pay_config["pay_tenpay_partnerkey"]); if ($resHandler->isTenpaySign()) { $notify_id = $resHandler->getParameter("notify_id"); $out_trade_no = $resHandler->getParameter("out_trade_no"); $transaction_id = $resHandler->getParameter("transaction_id"); $total_fee = $resHandler->getParameter("total_fee"); $discount = $resHandler->getParameter("discount"); $trade_state = $resHandler->getParameter("trade_state"); $trade_mode = $resHandler->getParameter("trade_mode"); if ("0" == $trade_state) { $order_id_arr = explode("_", $out_trade_no); $order_param["pay_type"] = "tenpay"; $order_param["is_mobile"] = "0"; $order_param["order_type"] = $order_id_arr[0]; $order_param["order_id"] = $order_id_arr[1]; $order_param["third_id"] = $transaction_id; $order_param["pay_money"] = $total_fee / 100; return array("error" => 0, "order_param" => $order_param); } else { return array("error" => 1, "msg" => "支付错误:付款失败!请联系管理员。"); } } else { return array("error" => 1, "msg" => "支付错误:认证签名失败!请联系管理员。"); } }
<META http-equiv=Content-Type content="text/html; charset=utf-8"> <?php //--------------------------------------------------------- //财付通即时到帐支付后台回调示例,商户按照此文档进行开发即可 //--------------------------------------------------------- require "classes/ResponseHandler.class.php"; require "classes/RequestHandler.class.php"; require "classes/client/ClientResponseHandler.class.php"; require "classes/client/TenpayHttpClient.class.php"; require "./classes/function.php"; require_once "./tenpay_config.php"; date_default_timezone_set('Asia/Shanghai'); log_result("进入后台回调页面"); /* 创建支付应答对象 */ $resHandler = new ResponseHandler(); $resHandler->setKey($key); //判断签名 if ($resHandler->isTenpaySign()) { //通知id $notify_id = $resHandler->getParameter("notify_id"); //通过通知ID查询,确保通知来至财付通 //创建查询请求 $queryReq = new RequestHandler(); $queryReq->init(); $queryReq->setKey($key); $queryReq->setGateUrl("https://gw.tenpay.com/gateway/simpleverifynotifyid.xml"); $queryReq->setParameter("partner", $partner); $queryReq->setParameter("notify_id", $notify_id); //通信对象 $httpClient = new TenpayHttpClient(); $httpClient->setTimeOut(5);
public function isTenpaySign() { $keysArr = array('ver', 'charset', 'pay_result', 'transaction_id', 'sp_billno', 'total_fee', 'fee_type', 'bargainor_id', 'attach', 'time_end'); return parent::isTenpaySign($keysArr); }