|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424 |
- <?php
- if(!defined('DEDEINC')) exit('dedebiz');
-
- class yeepay
- {
- var $dsql;
- var $mid;
-
-
-
- var $p0_Cmd = 'Buy';
-
-
-
- var $p9_SAF = "0";
-
-
- var $reqURL_onLine = "https://www.yeepay.com/app-merchant-proxy/node";
-
-
- var $return_url='/plus/carbuyaction.php?dopost=return';
-
-
-
- function yeepay()
- {
- global $dsql;
- $this->dsql = $dsql;
- }
-
- function __construct()
- {
- $this->yeepay();
- }
-
-
-
- function SetReturnUrl($returnurl='')
- {
- if (!empty($returnurl))
- {
- $this->return_url = $returnurl;
- }
- }
-
-
-
- function GetCode($order, $payment)
- {
- global $cfg_basehost,$cfg_cmspath;
-
- if(!empty($cfg_cmspath)) $cfg_basehost = $cfg_basehost.'/'.$cfg_cmspath;
-
-
-
-
-
-
- $p2_Order = trim($order['out_trade_no']);
-
-
-
- $p3_Amt = $order['price'];
-
-
- $p4_Cur = "CNY";
-
-
-
- $p5_Pid = trim($order['out_trade_no']);
-
-
- $p6_Pcat = 'cart';
-
-
- $p7_Pdesc = '';
-
-
-
- $p8_Url = $cfg_basehost.$this->return_url.'&code='.$payment['code'];
-
-
-
- $pa_MP = 'member';
-
-
-
- $pr_NeedResponse = 1;
-
-
-
- $pd_FrpId = '';
-
- $hmac = $this->getReqHmacString($payment['yp_account'],$payment['yp_key'],$p2_Order,$p3_Amt,$p4_Cur,$p5_Pid,$p6_Pcat,$p7_Pdesc,$p8_Url,$pa_MP,$pd_FrpId,$pr_NeedResponse);
-
- $button = '<form target="_blank" method="post" action="'.$this->reqURL_onLine.'">
- <input type="hidden" value="'.$this->p0_Cmd.'" name="p0_Cmd">
- <input type="hidden" value="'.$payment['yp_account'].'" name="p1_MerId">
- <input type="hidden" value="'.$p2_Order.'" name="p2_Order">
- <input type="hidden" value="'.$p3_Amt.'" name="p3_Amt">
- <input type="hidden" value="'.$p4_Cur.'" name="p4_Cur">
- <input type="hidden" value="'.$p5_Pid.'" name="p5_Pid">
- <input type="hidden" value="'.$p6_Pcat.'" name="p6_Pcat">
- <input type="hidden" value="'.$p7_Pdesc.'" name="p7_Pdesc">
- <input type="hidden" value="'.$p8_Url.'" name="p8_Url">
- <input type="hidden" value="'.$this->p9_SAF.'" name="p9_SAF">
- <input type="hidden" value="'.$pa_MP.'" name="pa_MP">
- <input type="hidden" value="'.$pd_FrpId.'" name="pd_FrpId">
- <input type="hidden" value="'.$pr_NeedResponse.'" name="pr_NeedResponse" >
- <input type="hidden" value="'.$hmac.'" name="hmac">
- <input type="submit" value="立即使用YeePay易宝支付"></form>';
-
-
- require_once DEDEINC.'/shopcar.class.php';
- $cart = new MemberShops();
- $cart->clearItem();
- $cart->MakeOrders();
- return $button;
- }
-
-
-
- function respond()
- {
-
-
- $code = preg_replace( "#[^0-9a-z-]#i", "", $_REQUEST['code'] );
- require_once DEDEDATA.'/payment/'.$code.'.php';
-
- $p1_MerId = trim($payment['yp_account']);
- $merchantKey = trim($payment['yp_key']);
-
-
- $return = $this->getCallBackValue($r0_Cmd, $r1_Code, $r2_TrxId, $r3_Amt, $r4_Cur, $r5_Pid, $r6_Order, $r7_Uid, $r8_MP, $r9_BType, $hmac);
-
-
- $bRet = $this->CheckHmac($p1_MerId,$merchantKey,$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")
- {
-
- if(preg_match ("/S-P[0-9]+RN[0-9]/",$r6_Order))
- {
-
- $row = $this->dsql->GetOne("SELECT * FROM #@__shops_orders WHERE oid = '{$r6_Order}'");
- $this->mid = $row['userid'];
- $ordertype="goods";
- } else if (preg_match ("/M[0-9]+T[0-9]+RN[0-9]/",$r6_Order)){
- $row = $this->dsql->GetOne("SELECT * FROM #@__member_operation WHERE buyid = '{$r6_Order}'");
-
- if(!is_array($row)||$row['sta']==2) return $msg = "您的订单已经处理,请不要重复提交!";
- $ordertype = "member";
- $product = $row['product'];
- $pname= $row['pname'];
- $pid=$row['pid'];
- $this->mid = $row['mid'];
- } else {
- return $msg = "支付失败,您的订单号有问题!";
- }
-
-
-
-
- if($r9_BType == "1" || $r9_BType == "3"){
- if($ordertype == "goods"){
- if($this->success_db($r6_Order)) return $msg = "支付成功!<br> <a href='/'>返回主页</a> <a href='/member'>会员中心</a>";
- else return $msg = "支付失败!<br> <a href='/'>返回主页</a> <a href='/member'>会员中心</a>";
- } else if ($ordertype=="member") {
- $oldinf = $this->success_mem($r6_Order,$pname,$product,$pid);
- return $msg = "<span style='color:#dc3545'>".$oldinf."</span><br> <a href='/'>返回主页</a> <a href='/member'>会员中心</a>";
- }
- } else if ( $r9_BType == "2" ){
-
- echo "success";
- if($ordertype=="goods"){
- if($this->success_db($r6_Order)) return $msg = "支付成功!<br> <a href='/'>返回主页</a> <a href='/member'>会员中心</a>";
- else return $msg = "支付失败!<br> <a href='/'>返回主页</a> <a href='/member'>会员中心</a>";
- } else if ($ordertype=="member") {
- if($this->success_mem($r6_Order,$pname,$product,$pid)) return $msg = "支付成功!<br> <a href='/'>返回主页</a> <a href='/member'>会员中心</a>";
- else return $msg = "支付失败!<br> <a href='/'>返回主页</a> <a href='/member'>会员中心</a>";
- }
- }
- }
- } else {
- $this->log_result ("verify_failed");
- return $msg = "交易信息被篡!<br> <a href='/'>返回主页</a> ";
- }
- }
-
-
-
- function getReqHmacString($p1_MerId,$merchantKey,$p2_Order,$p3_Amt,$p4_Cur,$p5_Pid,$p6_Pcat,$p7_Pdesc,$p8_Url,$pa_MP,$pd_FrpId,$pr_NeedResponse)
- {
-
- $sbOld = "";
-
- $sbOld = $sbOld.$this->p0_Cmd;
-
- $sbOld = $sbOld.$p1_MerId;
-
- $sbOld = $sbOld.$p2_Order;
-
- $sbOld = $sbOld.$p3_Amt;
-
- $sbOld = $sbOld.$p4_Cur;
-
- $sbOld = $sbOld.$p5_Pid;
-
- $sbOld = $sbOld.$p6_Pcat;
-
- $sbOld = $sbOld.$p7_Pdesc;
-
- $sbOld = $sbOld.$p8_Url;
-
- $sbOld = $sbOld.$this->p9_SAF;
-
- $sbOld = $sbOld.$pa_MP;
-
- $sbOld = $sbOld.$pd_FrpId;
-
- $sbOld = $sbOld.$pr_NeedResponse;
-
- return $this->HmacMd5($sbOld,$merchantKey);
- }
-
-
- function getCallBackValue(&$r0_Cmd,&$r1_Code,&$r2_TrxId,&$r3_Amt,&$r4_Cur,&$r5_Pid,&$r6_Order,&$r7_Uid,&$r8_MP,&$r9_BType,&$hmac)
- {
- $r0_Cmd = $_REQUEST['r0_Cmd'];
- $r1_Code = $_REQUEST['r1_Code'];
- $r2_TrxId = $_REQUEST['r2_TrxId'];
- $r3_Amt = $_REQUEST['r3_Amt'];
- $r4_Cur = $_REQUEST['r4_Cur'];
- $r5_Pid = $_REQUEST['r5_Pid'];
- $r6_Order = $_REQUEST['r6_Order'];
- $r7_Uid = $_REQUEST['r7_Uid'];
- $r8_MP = $_REQUEST['r8_MP'];
- $r9_BType = $_REQUEST['r9_BType'];
- $hmac = $_REQUEST['hmac'];
- return NULL;
- }
-
- function CheckHmac($p1_MerId,$merchantKey,$r0_Cmd,$r1_Code,$r2_TrxId,$r3_Amt,$r4_Cur,$r5_Pid,$r6_Order,$r7_Uid,$r8_MP,$r9_BType,$hmac)
- {
- if($hmac == $this->getCallbackHmacString($p1_MerId,$merchantKey,$r0_Cmd,$r1_Code,$r2_TrxId,$r3_Amt,$r4_Cur,$r5_Pid,$r6_Order,$r7_Uid,$r8_MP,$r9_BType))
- return TRUE;
- else
- return FALSE;
- }
-
- function getCallbackHmacString($p1_MerId,$merchantKey,$r0_Cmd,$r1_Code,$r2_TrxId,$r3_Amt,$r4_Cur,$r5_Pid,$r6_Order,$r7_Uid,$r8_MP,$r9_BType)
- {
-
- $sbOld = "";
-
- $sbOld = $sbOld.$p1_MerId;
-
- $sbOld = $sbOld.$r0_Cmd;
-
- $sbOld = $sbOld.$r1_Code;
-
- $sbOld = $sbOld.$r2_TrxId;
-
- $sbOld = $sbOld.$r3_Amt;
-
- $sbOld = $sbOld.$r4_Cur;
-
- $sbOld = $sbOld.$r5_Pid;
-
- $sbOld = $sbOld.$r6_Order;
-
- $sbOld = $sbOld.$r7_Uid;
-
- $sbOld = $sbOld.$r8_MP;
-
- $sbOld = $sbOld.$r9_BType;
-
- return $this->HmacMd5($sbOld,$merchantKey,'gbk');
-
- }
-
- function HmacMd5($data,$key,$lang='utf-8')
- {
-
-
-
-
-
-
- if($GLOBALS['cfg_soft_lang'] != 'utf-8' || $lang!='utf-8')
- {
- $key = gb2utf8($key);
- $data = gb2utf8($data);
- }
- $b = 64;
- if (strlen($key) > $b) {
- $key = pack("H*",md5($key));
- }
- $key = str_pad($key, $b, chr(0x00));
- $ipad = str_pad('', $b, chr(0x36));
- $opad = str_pad('', $b, chr(0x5c));
- $k_ipad = $key ^ $ipad ;
- $k_opad = $key ^ $opad;
-
- return md5($k_opad.pack("H*",md5($k_ipad.$data)));
- }
-
-
- function success_db($order_sn)
- {
-
- $row = $this->dsql->GetOne("SELECT state FROM #@__shops_orders WHERE oid='$order_sn' ");
- if($row['state'] > 0)
- {
- return TRUE;
- }
-
- $sql = "UPDATE `#@__shops_orders` SET `state`='1' WHERE `oid`='$order_sn' AND `userid`='".$this->mid."'";
- if($this->dsql->ExecuteNoneQuery($sql))
- {
- $this->log_result("verify_success,订单号:".$order_sn);
- return TRUE;
- } else {
- $this->log_result ("verify_failed,订单号:".$order_sn);
- return FALSE;
- }
- }
-
-
- function success_mem($order_sn,$pname,$product,$pid)
- {
-
- $sql = "UPDATE `#@__member_operation` SET `sta`='1' WHERE `buyid`='$order_sn' AND `mid`='".$this->mid."'";
- $this->dsql->ExecuteNoneQuery($sql);
-
-
- if($product=="card")
- {
- $row = $this->dsql->GetOne("SELECT cardid FROM #@__moneycard_record WHERE ctid='$pid' AND isexp='0' ");;
-
- if(!is_array($row))
- {
- $nrow = $this->dsql->GetOne("SELECT num FROM #@__moneycard_type WHERE pname = '{$pname}'");
- $dnum = $nrow['num'];
- $sql1 = "UPDATE `#@__member` SET `money`=money+'{$nrow['num']}' WHERE `mid`='".$this->mid."'";
- $oldinf ="已经充值了".$nrow['num']."金币到您的帐号";
- } else {
- $cardid = $row['cardid'];
- $sql1=" UPDATE #@__moneycard_record SET uid='".$this->mid."',isexp='1',utime='".time()."' WHERE cardid='$cardid' ";
- $oldinf='您的充值密码是:<span style="color:#28a745">'.$cardid.'</span>';
- }
-
- $sql2=" UPDATE #@__member_operation SET sta=2,oldinfo='$oldinf' WHERE buyid='$order_sn'";
- if($this->dsql->ExecuteNoneQuery($sql1) && $this->dsql->ExecuteNoneQuery($sql2))
- {
- $this->log_result("verify_success,订单号:".$order_sn);
- return $oldinf;
- } else {
- $this->log_result ("verify_failed,订单号:".$order_sn);
- return "支付失败";
- }
-
- } else if ( $product=="member" ){
- $row = $this->dsql->GetOne("SELECT rank,exptime FROM #@__member_type WHERE aid='$pid' ");
- $rank = $row['rank'];
- $exptime = $row['exptime'];
-
- $rs = $this->dsql->GetOne("SELECT uptime,exptime FROM #@__member WHERE mid='".$this->mid."'");
- if($rs['uptime']!=0 && $rs['exptime']!=0 )
- {
- $nowtime = time();
- $mhasDay = $rs['exptime'] - ceil(($nowtime - $rs['uptime'])/3600/24) + 1;
- $mhasDay=($mhasDay>0)? $mhasDay : 0;
- }
-
- $memrank = $this->dsql->GetOne("SELECT money,scores FROM #@__arcrank WHERE rank='$rank'");
-
- $sql1 = " UPDATE #@__member SET rank='$rank',money=money+'{$memrank['money']}',
- scores=scores+'{$memrank['scores']}',exptime='$exptime'+'$mhasDay',uptime='".time()."'
- WHERE mid='".$this->mid."'";
-
- $sql2=" UPDATE #@__member_operation SET sta='2',oldinfo='会员升级成功!' WHERE buyid='$order_sn' ";
- if($this->dsql->ExecuteNoneQuery($sql1) && $this->dsql->ExecuteNoneQuery($sql2))
- {
- $this->log_result("verify_success,订单号:".$order_sn);
- return "会员升级成功";
- } else {
- $this->log_result ("verify_failed,订单号:".$order_sn);
- return "会员升级失败";
- }
- }
- }
-
- function log_result($word) {
- global $cfg_cmspath;
- $fp = fopen(dirname(__FILE__)."/../../data/payment/log.txt","a");
- flock($fp, LOCK_EX) ;
- fwrite($fp,$word.",执行日期:".strftime("%Y-%m-%d %H:%I:%S",time())."\r\n");
- flock($fp, LOCK_UN);
- fclose($fp);
- }
-
- }
|