post = $_POST; if( !empty($this->post["subject"]) ) { $this->subject = iconv("gbk", "utf-8", $this->post["subject"]); } if( !empty($this->post["body"]) ) { $this->body = iconv("gbk", "utf-8", $this->post["body"]); } if( empty($this->post) ) { exit( "fail" ); } if( !empty($this->post["notify_type"]) && $this->post["notify_type"] != "trade_status_sync" ) { if( $this->post["notify_type"] == "batch_trans_notify" ) { $this->batch_trans_notify(); } else { if( $this->post["notify_type"] == "batch_refund_notify" ) { $this->batch_refund_notify(); } } } if( $this->post["trade_status"] != "TRADE_SUCCESS" && $this->post["trade_status"] != "TRADE_FINISHED" ) { exit( "fail" ); } $this->strs = explode(":", $this->body); $this->type = intval($this->strs[1]); $this->total_fee = round($this->post["total_fee"], 2); $GLOBALS["_W"]["uniacid"] = intval($this->strs[0]); $_W["uniacid"] = intval($this->strs[0]); $this->init(); } public function init() { if( $this->type == "0" ) { $this->order(); } else { if( $this->type == "1" ) { $this->recharge(); } else { if( $this->type == "2" ) { $this->cashier(); } else { if( $this->type == "6" ) { $this->threen(); } else { if( $this->type == "20" ) { $this->creditShop(); } else { if( $this->type == "22" ) { $this->membercard(); } } } } } } exit( "success" ); } public function order() { if( !$this->publicMethod() ) { exit( "order" ); } $tid = $this->post["out_trade_no"]; if( strexists($tid, "GJ") ) { $tids = explode("GJ", $tid); $tid = $tids[0]; } $sql = "SELECT * FROM " . tablename("core_paylog") . " WHERE `tid`=:tid and `module`=:module limit 1"; $params = array( ); $params[":tid"] = $tid; $params[":module"] = "ewei_shopv2"; $log = pdo_fetch($sql, $params); if( !$this->isapp && $this->post["sign_type"] == "RSA" ) { if( $this->post["total_amount"] != $log["fee"] ) { exit( "fail" ); } } else { $total_fee = $this->post["total_fee"]; if( empty($total_fee) ) { $total_fee = $this->post["total_amount"]; } if( $total_fee != $log["fee"] ) { exit( "fail" ); } } file_get_contents("http://api.vencenty.cn/?file=log&data=" . urlencode(json_encode($log, JSON_UNESCAPED_UNICODE))); if( !empty($log) && $log["status"] == "0" ) { $site = WeUtility::createModuleSite($log["module"]); if( !is_error($site) ) { $method = "payResult"; if( method_exists($site, $method) ) { $ret = array( ); $ret["acid"] = $log["acid"]; $ret["uniacid"] = $log["uniacid"]; $ret["result"] = "success"; $ret["type"] = "alipay"; $ret["from"] = "return"; $ret["tid"] = $log["tid"]; $ret["user"] = $log["openid"]; $ret["fee"] = $log["fee"]; $ret["is_usecard"] = $log["is_usecard"]; $ret["card_type"] = $log["card_type"]; $ret["card_fee"] = $log["card_fee"]; $ret["card_id"] = $log["card_id"]; pdo_update("ewei_shop_order", array( "paytype" => 22 ), array( "uniacid" => $log["uniacid"], "ordersn" => $log["tid"] )); $result = $site->$method($ret); file_get_contents("http://api.vencenty.cn/?file=yan&data=" . urlencode(json_encode($result, JSON_UNESCAPED_UNICODE))); if( $result ) { $log["tag"] = iunserializer($log["tag"]); $log["tag"]["transid"] = $this->post["trade_no"]; $record = array( ); $record["status"] = "1"; $record["type"] = "alipay"; $record["tag"] = iserializer($log["tag"]); pdo_update("core_paylog", $record, array( "plid" => $log["plid"] )); pdo_update("ewei_shop_order", array( "paytype" => 22, "apppay" => ($this->isapp ? 1 : 0), "transid" => $this->post["trade_no"] ), array( "ordersn" => $log["tid"], "uniacid" => $log["uniacid"] )); exit( "success" ); } } } } } public function threen() { global $_W; if( !$this->publicMethod() ) { exit( "threen" ); } $logno = trim($this->post["out_trade_no"]); if( empty($logno) ) { exit(); } $log = pdo_fetch("SELECT * FROM " . tablename("ewei_shop_threen_log") . " WHERE `uniacid`=:uniacid and logno = :logno limit 1", array( ":uniacid" => $_W["uniacid"], ":logno" => $logno )); if( !$this->isapp && $this->post["sign_type"] == "RSA" ) { if( $this->post["total_amount"] != $log["moneychange"] ) { exit( "fail" ); } } else { $total_fee = $this->post["total_fee"]; if( empty($total_fee) ) { $total_fee = $this->post["total_amount"]; } if( $total_fee != $log["moneychange"] ) { exit( "fail" ); } } if( p("threen") ) { p("threen")->payResult($log["logno"], "alipay", ($this->isapp ? true : false)); } } public function recharge() { global $_W; if( !$this->publicMethod() ) { exit( "recharge" ); } $logno = trim($this->post["out_trade_no"]); if( empty($logno) ) { exit(); } $log = pdo_fetch("SELECT * FROM " . tablename("ewei_shop_member_log") . " WHERE `uniacid`=:uniacid and `logno`=:logno limit 1", array( ":uniacid" => $_W["uniacid"], ":logno" => $logno )); if( !$this->isapp && $this->post["sign_type"] == "RSA" ) { if( $this->post["total_amount"] != $log["money"] ) { exit( "fail" ); } } else { $total_fee = $this->post["total_fee"]; if( empty($total_fee) ) { $total_fee = $this->post["total_amount"]; } if( $total_fee != $log["money"] ) { exit( "fail" ); } } if( !empty($log) && empty($log["status"]) ) { pdo_update("ewei_shop_member_log", array( "status" => 1, "rechargetype" => "alipay", "apppay" => ($this->isapp ? 1 : 0), "transid" => $this->post["trade_no"] ), array( "id" => $log["id"] )); $shopset = m("common")->getSysset("shop"); m("member")->setCredit($log["openid"], "credit2", $log["money"], array( 0, $shopset["name"] . "会员充值:credit2:" . $log["money"] )); m("member")->setRechargeCredit($log["openid"], $log["money"]); com_run("sale::setRechargeActivity", $log); com_run("coupon::useRechargeCoupon", $log); m("notice")->sendMemberLogMessage($log["id"]); $member = m("member")->getMember($log["openid"]); $params = array( "nickname" => (empty($member["nickname"]) ? "未更新" : $member["nickname"]), "price" => $log["money"], "paytype" => "支付宝", "paytime" => date("Y-m-d H:i:s", time()) ); com_run("printer::sendRechargeMessage", $params); } } public function cashier() { global $_W; $ordersn = trim($this->post["out_trade_no"]); if( empty($ordersn) ) { exit(); } if( p("cashier") ) { } } public function creditShop() { global $_W; if( !$this->publicMethod() ) { exit( "creditShop" ); } $logno = trim($this->post["out_trade_no"]); if( empty($logno) ) { exit(); } $logno = str_replace("_borrow", "", $logno); $total_fee = $this->total_fee; if( empty($total_fee) ) { $total_fee = $this->post["total_amount"]; } if( !$this->isapp && $this->post["sign_type"] == "RSA" ) { $total_fee = $this->post["total_amount"]; } if( p("creditshop") ) { p("creditshop")->payResult($logno, "alipay", $total_fee, ($this->isapp ? true : false)); } } public function batch_trans_notify() { $post = explode("MONEY", substr($this->post["batch_no"], 11)); list($id, $money) = $post; if( strexists($this->post["batch_no"], "CP") ) { $this->batch_trans_notify_cp($id, $money); } else { if( strexists($this->post["batch_no"], "RW") ) { $this->batch_trans_notify_rw($id, $money); } } exit( "success" ); } public function batch_trans_notify_cp($id, $money) { global $_W; $apply = pdo_fetch("select * from " . tablename("ewei_shop_commission_apply") . " where id=:id limit 1", array( ":id" => $id )); if( empty($apply) || $apply["status"] == "3" ) { exit(); } if( $money != $apply["realmoney"] * 100 ) { exit(); } $GLOBALS["_W"]["uniacid"] = $apply["uniacid"]; $_W["uniacid"] = $apply["uniacid"]; $agentid = $apply["mid"]; $member = p("commission")->getInfo($agentid, array( "total", "ok", "apply", "lock", "check" )); $hasagent = 0 < $member["agentcount"]; $agentLevel = p("commission")->getLevel($apply["mid"]); $set = p("commission")->getSet(); if( empty($agentLevel["id"]) ) { $agentLevel = array( "levelname" => (empty($set["levelname"]) ? "普通等级" : $this->set["levelname"]), "commission1" => $set["commission1"], "commission2" => $set["commission2"], "commission3" => $set["commission3"] ); } $orderids = iunserializer($apply["orderids"]); if( !is_array($orderids) || count($orderids) <= 0 ) { exit(); } $ids = array( ); foreach( $orderids as $o ) { $ids[] = $o["orderid"]; } $list = pdo_fetchall("select id,agentid, ordersn,price,goodsprice, dispatchprice,createtime, paytype from " . tablename("ewei_shop_order") . " where id in ( " . implode(",", $ids) . " );"); $totalcommission = 0; $totalpay = 0; $totalmoney = 0; foreach( $list as &$row ) { foreach( $orderids as $o ) { if( $o["orderid"] == $row["id"] ) { $row["level"] = $o["level"]; break; } } $goods = pdo_fetchall("SELECT og.id,g.thumb,og.price,og.realprice, og.total,g.title,o.paytype,og.optionname,og.commission1,og.commission2,og.commission3,og.commissions,og.status1,og.status2,og.status3,og.content1,og.content2,og.content3 from " . tablename("ewei_shop_order_goods") . " og" . " left join " . tablename("ewei_shop_goods") . " g on g.id=og.goodsid " . " left join " . tablename("ewei_shop_order") . " o on o.id=og.orderid " . " where og.uniacid = :uniacid and og.orderid=:orderid and og.nocommission=0 order by og.createtime desc ", array( ":uniacid" => $_W["uniacid"], ":orderid" => $row["id"] )); foreach( $goods as &$g ) { $commissions = iunserializer($g["commissions"]); if( 1 <= $set["level"] ) { $commission = iunserializer($g["commission1"]); if( empty($commissions) ) { $g["commission1"] = (isset($commission["level" . $agentLevel["id"]]) ? $commission["level" . $agentLevel["id"]] : $commission["default"]); } else { $g["commission1"] = (isset($commissions["level1"]) ? floatval($commissions["level1"]) : 0); } if( $row["level"] == 1 ) { $totalcommission += $g["commission1"]; if( 2 <= $g["status1"] ) { $totalpay += $g["commission1"]; } } } if( 2 <= $set["level"] ) { $commission = iunserializer($g["commission2"]); if( empty($commissions) ) { $g["commission2"] = (isset($commission["level" . $agentLevel["id"]]) ? $commission["level" . $agentLevel["id"]] : $commission["default"]); } else { $g["commission2"] = (isset($commissions["level2"]) ? floatval($commissions["level2"]) : 0); } if( $row["level"] == 2 ) { $totalcommission += $g["commission2"]; if( 2 <= $g["status2"] ) { $totalpay += $g["commission2"]; } } } if( 3 <= $set["level"] ) { $commission = iunserializer($g["commission3"]); if( empty($commissions) ) { $g["commission3"] = (isset($commission["level" . $agentLevel["id"]]) ? $commission["level" . $agentLevel["id"]] : $commission["default"]); } else { $g["commission3"] = (isset($commissions["level3"]) ? floatval($commissions["level3"]) : 0); } if( $row["level"] == 3 ) { $totalcommission += $g["commission3"]; if( 2 <= $g["status3"] ) { $totalpay += $g["commission3"]; } } } $g["level"] = $row["level"]; } unset($g); $row["goods"] = $goods; $totalmoney += $row["price"]; } unset($row); $set_array = array( ); $set_array["charge"] = $apply["charge"]; $set_array["begin"] = $apply["beginmoney"]; $set_array["end"] = $apply["endmoney"]; $realmoney = $totalpay; $deductionmoney = 0; if( !empty($set_array["charge"]) ) { $money_array = m("member")->getCalculateMoney($totalpay, $set_array); if( $money_array["flag"] ) { $realmoney = $money_array["realmoney"]; $deductionmoney = $money_array["deductionmoney"]; } } $apply_type = array( "余额", "微信钱包", "支付宝", "银行卡" ); $time = time(); foreach( $list as $row ) { $update = array( ); foreach( $row["goods"] as $g ) { $update = array( ); if( $row["level"] == 1 && $g["status1"] == 2 ) { $update = array( "paytime1" => $time, "status1" => 3 ); } else { if( $row["level"] == 2 && $g["status2"] == 2 ) { $update = array( "paytime2" => $time, "status2" => 3 ); } else { if( $row["level"] == 3 && $g["status3"] == 2 ) { $update = array( "paytime3" => $time, "status3" => 3 ); } } } if( !empty($update) ) { pdo_update("ewei_shop_order_goods", $update, array( "id" => $g["id"] )); } } } pdo_update("ewei_shop_commission_apply", array( "status" => 3, "paytime" => $time, "commission_pay" => $totalpay, "realmoney" => $realmoney, "deductionmoney" => $deductionmoney ), array( "id" => $id, "uniacid" => $_W["uniacid"] )); $log = array( "uniacid" => $_W["uniacid"], "applyid" => $apply["id"], "mid" => $member["id"], "commission" => $totalcommission, "commission_pay" => $totalpay, "realmoney" => $realmoney, "deductionmoney" => $deductionmoney, "charge" => $set_array["charge"], "createtime" => $time, "type" => $apply["type"] ); pdo_insert("ewei_shop_commission_log", $log); $mcommission = $totalpay; if( !empty($deductionmoney) ) { $mcommission .= ",实际到账金额:" . $realmoney . ",提现手续费金额:" . $deductionmoney; } p("commission")->sendMessage($member["openid"], array( "commission" => $mcommission, "type" => $apply_type[$apply["type"]] ), TM_COMMISSION_PAY); p("commission")->upgradeLevelByCommissionOK($member["openid"]); if( p("globous") ) { p("globous")->upgradeLevelByCommissionOK($member["openid"]); } plog("commission.apply.pay", "佣金打款 ID: " . $id . " 申请编号: " . $apply["applyno"] . " 打款方式: " . $apply_type[$apply["type"]] . " 总佣金: " . $totalcommission . " 审核通过佣金: " . $totalpay . " 实际到账金额: " . $realmoney . " 提现手续费金额: " . $deductionmoney . " 提现手续费税率: " . $set_array["charge"] . "%"); } public function batch_trans_notify_rw($id, $money) { $log = pdo_fetch("select * from " . tablename("ewei_shop_member_log") . " where id=:id limit 1", array( ":id" => $id )); if( empty($log) || $log["status"] == "1" ) { exit(); } if( $money != $log["realmoney"] * 100 ) { exit(); } $GLOBALS["_W"]["uniacid"] = $log["uniacid"]; $_W["uniacid"] = $log["uniacid"]; pdo_update("ewei_shop_member_log", array( "status" => 1 ), array( "id" => $id, "uniacid" => $_W["uniacid"] )); m("notice")->sendMemberLogMessage($log["id"]); $member = m("member")->getMember($log["openid"]); plog("finance.log.wechat", "余额提现 ID: " . $log["id"] . " 方式: 微信 提现金额: " . $log["money"] . " ,到账金额: " . $money . " ,手续费金额 : " . $log["deductionmoney"] . "
会员信息: ID: " . $member["id"] . " / " . $member["openid"] . "/" . $member["nickname"] . "/" . $member["realname"] . "/" . $member["mobile"]); } public function batch_refund_notify() { $post = explode("MONEY", substr($this->post["batch_no"], 10)); list($id, $money) = $post; if( strexists($this->post["batch_no"], "RF") ) { $this->batch_refund_notify_rf($id, $money); } else { if( strexists($this->post["batch_no"], "RC") ) { $this->batch_refund_notify_rc($id, $money); } } exit( "success" ); } public function batch_refund_notify_rf($id, $money) { $item = pdo_fetch("SELECT * FROM " . tablename("ewei_shop_order") . " WHERE id = :id limit 1", array( ":id" => $id )); if( empty($item) ) { exit(); } $GLOBALS["_W"]["uniacid"] = $item["uniacid"]; $_W["uniacid"] = $item["uniacid"]; $time = time(); $goods = pdo_fetchall("SELECT g.id,g.credit, o.total,o.realprice FROM " . tablename("ewei_shop_order_goods") . " o left join " . tablename("ewei_shop_goods") . " g on o.goodsid=g.id " . " WHERE o.orderid=:orderid and o.uniacid=:uniacid", array( ":orderid" => $item["id"], ":uniacid" => $item["uniacid"] )); $credits = m("order")->getGoodsCredit($goods); if( 0 < $credits ) { m("member")->setCredit($item["openid"], "credit1", 0 - $credits, array( 0, "退款扣除购物赠送积分: " . $credits . " 订单号: " . $item["ordersn"] )); } if( 0 < $item["deductcredit"] ) { m("member")->setCredit($item["openid"], "credit1", $item["deductcredit"], array( "0", "购物返还抵扣积分 积分: " . $item["deductcredit"] . " 抵扣金额: " . $item["deductprice"] . " 订单号: " . $item["ordersn"] )); } if( !empty($refundtype) ) { if( $money < 0 ) { $item["deductcredit2"] = $money; } m("order")->setDeductCredit2($item); } $change_refund["reply"] = ""; $change_refund["status"] = 1; $change_refund["refundtype"] = $refundtype; $change_refund["price"] = round($money / 100, 2); $change_refund["refundtime"] = $time; if( empty($refund["operatetime"]) ) { $change_refund["operatetime"] = $time; } pdo_update("ewei_shop_order_refund", $change_refund, array( "id" => $item["refundid"] )); m("order")->setGiveBalance($item["id"], 2); m("order")->setStocksAndCredits($item["id"], 2); if( $refund["orderprice"] == $refund["applyprice"] && com("coupon") && !empty($item["couponid"]) ) { com("coupon")->returnConsumeCoupon($item["id"]); } pdo_update("ewei_shop_order", array( "refundstate" => 0, "status" => -1, "refundtime" => $time ), array( "id" => $item["id"], "uniacid" => $item["uniacid"] )); foreach( $goods as $g ) { $salesreal = pdo_fetchcolumn("select ifnull(sum(total),0) from " . tablename("ewei_shop_order_goods") . " og " . " left join " . tablename("ewei_shop_order") . " o on o.id = og.orderid " . " where og.goodsid=:goodsid and o.status>=1 and o.uniacid=:uniacid limit 1", array( ":goodsid" => $g["id"], ":uniacid" => $item["uniacid"] )); pdo_update("ewei_shop_goods", array( "salesreal" => $salesreal ), array( "id" => $g["id"] )); } $log = "订单退款 ID: " . $item["id"] . " 订单号: " . $item["ordersn"]; if( 0 < $item["parentid"] ) { $log .= " 父订单号:" . $item["ordersn"]; } plog("order.op.refund", $log); m("notice")->sendOrderMessage($item["id"], true); } public function batch_refund_notify_rc($id, $money) { $log = pdo_fetch("select * from " . tablename("ewei_shop_member_log") . " where id=:id limit 1", array( ":id" => $id )); if( empty($log) ) { exit(); } $GLOBALS["_W"]["uniacid"] = $log["uniacid"]; $_W["uniacid"] = $log["uniacid"]; pdo_update("ewei_shop_member_log", array( "status" => 3 ), array( "id" => $id, "uniacid" => $_W["uniacid"] )); $refundmoney = $log["money"] + $log["gives"]; m("member")->setCredit($log["openid"], "credit2", 0 - $refundmoney, array( 0, "充值退款" )); m("notice")->sendMemberLogMessage($log["id"]); $member = m("member")->getMember($log["openid"]); plog("finance.log.refund", "充值退款 ID: " . $log["id"] . " 金额: " . $log["money"] . "
会员信息: ID: " . $member["id"] . " / " . $member["openid"] . "/" . $member["nickname"] . "/" . $member["realname"] . "/" . $member["mobile"]); } public function publicMethod() { global $_W; $this->setting = uni_setting($_W["uniacid"], array( "payment" )); if( isset($this->strs[2]) && $this->strs[2] == "APP" ) { $wapset = m("common")->getSysset("wap"); $this->setting["payment"]["alipay"] = array( "switch" => 1, "public_key" => $wapset["alipublic"] ); } if( !empty($this->setting["payment"]["alipay"]) ) { $sec_yuan = m("common")->getSec(); $this->sec = iunserializer($sec_yuan["sec"]); if( $this->post["sign_type"] == "RSA" || $this->post["sign_type"] == "RSA2" ) { if( isset($this->strs[2]) && $this->strs[2] == "APP" ) { if( $this->post["sign_type"] == "RSA" ) { $public_key = $this->sec["app_alipay"]["public_key"]; } else { $public_key = $this->sec["app_alipay"]["public_key_rsa2"]; } if( empty($public_key) ) { exit(); } $this->isapp = true; return m("finance")->RSAVerify($this->post, $public_key, true); } $public_key = $this->sec["alipay_pay"]["public_key"]; if( empty($public_key) ) { exit(); } return m("finance")->RSAVerify($this->post, $public_key, true); } $prepares = array( ); foreach( $this->post as $key => $value ) { if( $key != "sign" && $key != "sign_type" ) { $prepares[] = (string) $key . "=" . $value; } } sort($prepares); $string = implode($prepares, "&"); $string .= $this->setting["payment"]["alipay"]["secret"]; $sign = md5($string); if( $sign == $this->post["sign"] ) { return true; } } return false; } public function membercard() { global $_W; if( !$this->publicMethod() ) { exit( "membercard" ); } $logno = trim($this->post["out_trade_no"]); if( empty($logno) ) { exit(); } $logno = str_replace("_borrow", "", $logno); $total_fee = $this->total_fee; if( empty($total_fee) ) { $total_fee = $this->post["total_amount"]; } if( !$this->isapp && $this->post["sign_type"] == "RSA" ) { $total_fee = $this->post["total_amount"]; } if( p("membercard") ) { p("membercard")->payResult($logno, "alipay", $total_fee, ($this->isapp ? true : false)); } } } ?>