dsql = $dsql; } function __construct() { $this->Alipay(); } /** * 设定接口会送地址 * * 例如: $this->SetReturnUrl($cfg_basehost."/tuangou/control/index.php?ac=pay&orderid=".$p2_Order) * * @param string $returnurl 会送地址 * @return void */ function SetReturnUrl($returnurl='') { if (!empty($returnurl)) { $this->return_url = $returnurl; } } /** * 生成支付代码 * @param array $order 订单信息 * @param array $payment 支付方式信息 */ function GetCode($order, $payment) { global $cfg_basehost,$cfg_cmspath,$cfg_soft_lang; $charset = $cfg_soft_lang; //对于二级目录的处理 if(!empty($cfg_cmspath)) $cfg_basehost = $cfg_basehost.'/'.$cfg_cmspath; $real_method = $payment['alipay_pay_method']; switch ($real_method){ case '0': $service = 'trade_create_by_buyer'; break; case '1': $service = 'create_partner_trade_by_buyer'; break; case '2': $service = 'create_direct_pay_by_user'; break; } $agent = 'C4335994340215837114'; $parameter = array( 'agent' => $agent, 'service' => $service, 'partner' => $payment['alipay_partner'], //'partner' => ALIPAY_ID, '_input_charset' => $charset, 'notify_url' => $cfg_basehost.$this->return_url."&code=".$payment['code'], 'return_url' => $cfg_basehost.$this->return_url."&code=".$payment['code'], /* 业务参数 */ 'subject' => "支付订单号:".$order['out_trade_no'], 'out_trade_no' => $order['out_trade_no'], 'price' => $order['price'], 'quantity' => 1, 'payment_type' => 1, /* 物流参数 */ 'logistics_type' => 'EXPRESS', 'logistics_fee' => 0, 'logistics_payment' => 'BUYER_PAY_AFTER_RECEIVE', /* 买卖双方信息 */ 'seller_email' => $payment['alipay_account'] ); ksort($parameter); reset($parameter); $param = ''; $sign = ''; foreach ($parameter AS $key => $val) { $param .= "$key=" .urlencode($val). "&"; $sign .= "$key=$val&"; } $param = substr($param, 0, -1); $sign = substr($sign, 0, -1). $payment['alipay_key']; $button = '
'; /* 清空购物车 */ require_once DEDEINC.'/shopcar.class.php'; $cart = new MemberShops(); $cart->clearItem(); $cart->MakeOrders(); return $button; } /** * 响应操作 */ function respond() { if (!empty($_POST)) { foreach($_POST as $key => $data) { $_GET[$key] = $data; } } /* 引入配置文件 */ $code = preg_replace( "#[^0-9a-z-]#i", "", $_GET['code'] ); require_once DEDEDATA.'/payment/'.$code.'.php'; /* 取得订单号 */ $order_sn = trim(addslashes($_GET['out_trade_no'])); /*判断订单类型*/ if(preg_match ("/S-P[0-9]+RN[0-9]/",$order_sn)) { //检查支付金额是否相符 $row = $this->dsql->GetOne("SELECT * FROM #@__shops_orders WHERE oid = '{$order_sn}'"); if ($row['priceCount'] != $_GET['total_fee']) { return $msg = "支付失败,支付金额与商品总价不相符!"; } $this->mid = $row['userid']; $ordertype="goods"; }else if (preg_match ("/M[0-9]+T[0-9]+RN[0-9]/", $order_sn)){ $row = $this->dsql->GetOne("SELECT * FROM #@__member_operation WHERE buyid = '{$order_sn}'"); //获取订单信息,检查订单的有效性 if(!is_array($row)||$row['sta']==2) return $msg = "您的订单已经处理,请不要重复提交!"; elseif($row['money'] != $_GET['total_fee']) return $msg = "支付失败,支付金额与商品总价不相符!"; $ordertype = "member"; $product = $row['product']; $pname= $row['pname']; $pid=$row['pid']; $this->mid = $row['mid']; } else { return $msg = "支付失败,您的订单号有问题"; } /* 检查数字签名是否正确 */ ksort($_GET); reset($_GET); $sign = ''; foreach ($_GET AS $key=>$val) { if ($key != 'sign' && $key != 'sign_type' && $key != 'code' && $key != 'dopost') { $sign .= "$key=$val&"; } } $sign = substr($sign, 0, -1).$payment['alipay_key']; if (md5($sign) != $_GET['sign']) { return $msg = "支付失败!"; } if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'WAIT_SELLER_SEND_GOODS' || $_GET['trade_status'] == 'TRADE_SUCCESS') { if($ordertype=="goods"){ if($this->success_db($order_sn)) return $msg = "支付成功!