예제 #1
0
 /**
  * 支付完成后返回处理
  * 
  * @param array params
  * @return void
  */
 public function complete($params)
 {
     $view = new Sp_View();
     #	解析返回参数.
     $return = Sp_Payment_Yeepay_Common::getCallBackValue($r0_Cmd, $r1_Code, $r2_TrxId, $r3_Amt, $r4_Cur, $r5_Pid, $r6_Order, $r7_Uid, $r8_MP, $r9_BType, $hmac);
     #	判断返回签名是否正确(True/False)
     $bRet = Sp_Payment_Yeepay_Common::CheckHmac($r0_Cmd, $r1_Code, $r2_TrxId, $r3_Amt, $r4_Cur, $r5_Pid, $r6_Order, $r7_Uid, $r8_MP, $r9_BType, $hmac);
     #	以上代码和变量不需要修改.
     #	校验码正确.
     if ($bRet) {
         if ($r1_Code == "1") {
             #	需要比较返回的金额与商家数据库中订单的金额是否相等,只有相等的情况下才认为是交易成功.
             #	并且需要对返回的处理进行事务控制,进行记录的排它性处理,在接收到支付结果通知后,判断是否进行过业务逻辑处理,不要重复进行业务逻辑处理,防止对同一条交易重复发货的情况发生.
             $user_id = $r8_MP;
             //用户id
             $sn = trim($r6_Order);
             //订单号
             $amount = floatval($r3_Amt);
             //金额
             $recharge_info = Sp_Trade_Recharge::getBySn($sn);
             if (floatval($recharge_info['amount']) == $amount and $recharge_info['user_id'] == $user_id) {
                 if ($r9_BType == "1") {
                     #交易成功 在线支付页面返回
                     $request = Request::current();
                     if ($request->isMobile()) {
                         Loader::redirect(SP_URL_WAP . 'moneyrecord.html');
                     } else {
                         Loader::redirect(SP_URL_USER . 'moneyrecord.html');
                     }
                     /*
                     						$ret = false;
                     						if($recharge_info['status'] < 1) {
                     							$param = array(
                     								'id' => $recharge_info['id'],
                     								'user_id' => $user_id,
                     								'sn' => $sn,
                     								'amount' => $amount,
                     								'bank_sn' => $_REQUEST['ro_BankOrderId'],
                     								'trd_sn' => $_REQUEST['r2_TrxId'],
                     								'remark' => json_encode($_REQUEST)
                     							);
                     							$ret = Sp_Trade_Tradeprocess::recharge($param);
                     						}
                     						if($ret) {//处理成功
                     							$user = Sp_Account_User::getUserBase($user_id); //用户信息
                     							$data = array(
                     								'user_id' => $user_id,
                     								'account' => $amount,
                     								'user_name' => $user->data["username"],
                     								'email' => $user->data['email'],
                     								'realname' => $user->data["username"],
                     								'phone' => $user->data['phone'],
                     							);
                     							Sp_Message::send('recharge', $data);//发送消息
                     							Loader::redirect(SP_URL_USER.'moneyrecord.html');
                     						}elseif($recharge_info['status'] < 1) {//失败
                     							echo '资金流处理失败!';
                     							$body = print_r($_REQUEST,true);
                     							Sp_Admin_Mail::send('*****@*****.**', '资金流处理失败!', $body);
                     						}else{
                     							$request = Request::current();
                     							if($request->isMobile()) {
                     								Loader::redirect(SP_URL_WAP.'moneyrecord.html');
                     							}else{
                     								Loader::redirect(SP_URL_USER.'moneyrecord.html');
                     							}
                     						}*/
                 } elseif ($r9_BType == "2") {
                     #如果需要应答机制则必须回写流,以success开头,大小写不敏感.
                     $ret = false;
                     if ($recharge_info['status'] == 1) {
                         echo "success";
                     } elseif ($recharge_info['status'] < 1) {
                         $param = array('id' => $recharge_info['id'], 'user_id' => $user_id, 'sn' => $sn, 'amount' => $amount, 'bank_sn' => $_REQUEST['ro_BankOrderId'], 'trd_sn' => $_REQUEST['r2_TrxId'], 'remark' => json_encode($_REQUEST));
                         $amount_num = Sp_Trade_Recharge::getUserRechargeReport('WHERE status = 1 AND user_id=' . $user_id);
                         $ret = Sp_Trade_Tradeprocess::recharge($param);
                         if ($ret) {
                             //处理成功
                             //首冲奖励
                             if ($amount_num == 0) {
                                 $active_send_info = array('uid' => $user_id, 'type' => 'first_recharge');
                                 $client_active = MQClient::factory('active');
                                 $client_active->send('activePrizeReset_new_register', $active_send_info);
                             }
                             $user = Sp_Account_User::getUserBase($user_id);
                             //用户信息
                             $data = array('user_id' => $user_id, 'account' => $amount, 'user_name' => $user->data["username"], 'email' => $user->data['email'], 'realname' => $user->data["username"], 'phone' => $user->data['phone']);
                             Sp_Message::send('recharge', $data);
                             //发送消息
                         } else {
                             echo '资金流处理失败!';
                             $body = print_r($_REQUEST, true);
                             Sp_Admin_Mail::send('*****@*****.**', '资金流处理失败!', $body);
                         }
                     }
                 }
             }
         }
     } else {
         $body = print_r($_REQUEST, true);
         Sp_Admin_Mail::send('*****@*****.**', '易宝支付失败(签名验证失败)', $body);
         $view->assign('error_message', "抱歉,您的支付没有成功,请重新支付,谢谢");
         $view->out_404();
         return;
     }
 }
예제 #2
0
 /**
  * 支付完成后返回处理(异步)
  * 
  * @param array params
  * @return void
  */
 public function notify($params)
 {
     $view = new Sp_View();
     #	解析返回参数.
     $version = $params["version"];
     $charset = $params["charset"];
     $language = $params["language"];
     $signType = $params["signType"];
     $tranCode = $params["tranCode"];
     $merchantID = $params["merchantID"];
     $merOrderNum = $params["merOrderNum"];
     $tranAmt = $params["tranAmt"];
     $feeAmt = $params["feeAmt"];
     $frontMerUrl = $params["frontMerUrl"];
     $backgroundMerUrl = $params["backgroundMerUrl"];
     $tranDateTime = $params["tranDateTime"];
     $tranIP = $params["tranIP"];
     $respCode = $params["respCode"];
     $msgExt = $params["msgExt"];
     $orderId = $params["orderId"];
     $gopayOutOrderId = $params["gopayOutOrderId"];
     $bankCode = $params["bankCode"];
     $tranFinishTime = $params["tranFinishTime"];
     $merRemark1 = $params["merRemark1"];
     $merRemark2 = $params["merRemark2"];
     $signValue = $params["signValue"];
     #	判断返回签名是否正确(True/False)
     $bRet = Sp_Payment_Gopay_HttpClient::CheckHmac($version, $tranCode, $merchantID, $merOrderNum, $tranAmt, $feeAmt, $tranDateTime, $frontMerUrl, $backgroundMerUrl, $orderId, $gopayOutOrderId, $tranIP, $respCode, '', self::$verficationCode, $signValue);
     if ($bRet) {
         if ($respCode == '0000') {
             $sn = trim($merOrderNum);
             //订单号
             $amount = floatval($tranAmt);
             //金额
             $recharge_info = Sp_Trade_Recharge::getBySn($sn);
             $amount_num = 1;
             if (floatval($recharge_info['amount']) == $amount) {
                 $ret = false;
                 if ($recharge_info['status'] == 1) {
                     $request = Request::current();
                     if ($request->isMobile()) {
                         echo 'RespCode=0000|JumpURL=' . SP_URL_WAP . 'moneyrecord.html';
                     } else {
                         echo 'RespCode=0000|JumpURL=' . SP_URL_USER . 'moneyrecord.html';
                     }
                     exit;
                 } elseif ($recharge_info['status'] < 1) {
                     $amount_num = Sp_Trade_Recharge::getUserRechargeReport('WHERE status = 1 AND user_id=' . $recharge_info['user_id']);
                     $param = array('id' => $recharge_info['id'], 'user_id' => $recharge_info['user_id'], 'sn' => $sn, 'amount' => $amount, 'bank_sn' => $_REQUEST['gopayOutOrderId'], 'trd_sn' => $_REQUEST['orderId'], 'remark' => json_encode($_REQUEST));
                     $ret = Sp_Trade_Tradeprocess::recharge($param);
                 }
                 if ($ret) {
                     //处理成功
                     //首冲奖励
                     if ($amount_num == 0) {
                         $active_send_info = array('uid' => $recharge_info['user_id'], 'type' => 'first_recharge');
                         $client_active = MQClient::factory('active');
                         $client_active->send('activePrizeReset_new_register', $active_send_info);
                     }
                     $user = Sp_Account_User::getUserBase($recharge_info['user_id']);
                     //用户信息
                     $data = array('user_id' => $recharge_info['user_id'], 'account' => $amount, 'user_name' => $user->data["username"], 'email' => $user->data['email'], 'realname' => $user->data["username"], 'phone' => $user->data['phone']);
                     Sp_Message::send('recharge', $data);
                     //发送消息
                     $request = Request::current();
                     if ($request->isMobile()) {
                         echo 'RespCode=0000|JumpURL=' . SP_URL_WAP . 'moneyrecord.html';
                     } else {
                         echo 'RespCode=0000|JumpURL=' . SP_URL_USER . 'moneyrecord.html';
                     }
                 } else {
                     echo 'RespCode=9999|JumpURL=';
                     $body = print_r($_REQUEST, true);
                     Sp_Admin_Mail::send('*****@*****.**', '国付宝支付失败(数据库处理失败)', $body);
                 }
             }
         } else {
             $body = print_r($_REQUEST, true);
             Sp_Admin_Mail::send('*****@*****.**', '国付宝支付失败(国付宝处理失败)', $body);
             echo 'RespCode=9999|JumpURL=';
         }
     } else {
         $body = print_r($_REQUEST, true);
         Sp_Admin_Mail::send('*****@*****.**', '国付宝支付失败(签名验证失败)', $body);
         echo 'RespCode=9999|JumpURL=';
         exit;
     }
 }