GetOut_trade_no(); //②、接口调用成功,明确返回调用失败 if($result["return_code"] == "SUCCESS" && $result["result_code"] == "FAIL" && $result["err_code"] != "USERPAYING" && $result["err_code"] != "SYSTEMERROR") { return false; } //③、确认支付是否成功 $queryTimes = 10; $i = 0; while($queryTimes > 0) { $succResult = 0; $queryResult = $this->query($out_trade_no, $succResult,$sfxf); //如果需要等待2s后继续 if($succResult == 2){ sleep(2); $queryTimes--; continue; } else if($succResult == 1){//查询成功 return $queryResult; }else {//订单交易失败 return $queryResult; } } return 3; } /** * * 查询订单情况 * @param string $out_trade_no 商户订单号 * @param int $succCode 查询订单结果 * @return 0 订单不成功,1表示订单成功,2表示继续等待 */ public function query($out_trade_no, &$succCode,$sfxf) { $queryOrderInput = new WxPayOrderQuery(); $queryOrderInput->SetOut_trade_no($out_trade_no); $result = WxPayApi::orderQuery($queryOrderInput); // var_dump($result);exit; if($result["return_code"] == "SUCCESS" && $result["result_code"] == "SUCCESS") { //支付成功 if($result["trade_state"] == "SUCCESS"){ //解锁 $key='apivcomcn20170421'; $attach = json_decode($result["attach"],true); $ShopOrdID = $attach["ShopOrdID"]; if(!empty($attach["ShopUserID"])){ $ShopUserID = urlencode($attach["ShopUserID"]); }else{ $ShopUserID=urlencode("实体店-白马星汇良仓"); } $method = "Order_AddressEdit"; $NewShopUserID = $ShopUserID; $arr = array("method"=>$method,"ShopOrdID"=>$ShopOrdID,"ShopUserID"=>$ShopUserID,"NewShopUserID"=>$NewShopUserID); if(isset($attach["strName"])){ $strName = $attach["strName"]; $arr["strName"] = urlencode($strName); } if(!empty($attach["strPhone"])){ $strPhone = $attach["strPhone"]; $arr["strPhone"] = $strPhone; } ksort($arr); $i=0; $stringA=''; foreach($arr as $k=>$v){ $stringA=$stringA.$k.$v; } $stringSignTemp=$stringA.$key; $stringSignTemp=str_replace(" ", "%20", $stringSignTemp); $sign=MD5($stringSignTemp); $content = ""; $content = 'method='.$method.'&ShopOrdID='.$ShopOrdID.'&ShopUserID='.$ShopUserID."&NewShopUserID=".$NewShopUserID; if(isset($attach["strName"])){ $content .= '&strName='.urlencode($strName); } if(!empty($attach["strPhone"])){ $content .= '&strPhone='.$strPhone; } $content .= '&Sign='.$sign; $order_url='http://api.v.com.cn/order/?'.$content; $order_url=str_replace(" ", "%20", $order_url); // var_dump($url);exit; $orderinfo_change=file_get_contents($order_url); $orderinfo_change=json_decode($orderinfo_change,true); //刷新支付信息 $method = "Order_PayNotify"; $transaction_id = $result["transaction_id"]; $mch_id = $result["mch_id"]; $openid = $result["openid"]; $out_trade_no = $result["out_trade_no"]; $total_fee = number_format($result["total_fee"]/100,2,'.',''); $PayMono = urlencode("微信支付"); $arr = array("method"=>$method,"transaction_id"=>$transaction_id,"mch_id"=>$mch_id,"out_trade_no"=>$out_trade_no,"total_fee"=>$total_fee,"ShopOrdID"=>$ShopOrdID,"PayMono"=>$PayMono,"openid"=>$openid); ksort($arr); $i=0; $stringA=''; foreach($arr as $k=>$v){ $stringA=$stringA.$k.$v; } $stringSignTemp=$stringA.$key; $stringSignTemp=str_replace(" ", "%20", $stringSignTemp); $sign=MD5($stringSignTemp); $content = 'method='.$method.'&transaction_id='.$transaction_id.'&mch_id='.$mch_id.'&out_trade_no='.$out_trade_no.'&total_fee='.$total_fee.'&ShopOrdID='.$ShopOrdID.'&PayMono='.$PayMono."&openid=".$openid; $content .= '&Sign='.$sign; $order_url='http://api.v.com.cn/order/?'.$content; $order_url=str_replace(" ", "%20", $order_url); $orderinfo=file_get_contents($order_url); $orderinfo=json_decode($orderinfo,true); if($sfxf == "2"){ $succCode = 1; return $result; }else{ $method = "Order_detail"; $arr = array("method"=>$method,"ShopOrdID"=>$ShopOrdID); ksort($arr); $i=0; $stringA=''; foreach($arr as $k=>$v){ $stringA=$stringA.$k.$v; } $stringSignTemp=$stringA.$key; $stringSignTemp=str_replace(" ", "%20", $stringSignTemp); $sign=MD5($stringSignTemp); $content = 'method='.$method.'&ShopOrdID='.$ShopOrdID; $content .= '&Sign='.$sign; $order_url='http://api.v.com.cn/order/?'.$content; $order_url=str_replace(" ", "%20", $order_url); // var_dump($url);exit; $orderinfo=file_get_contents($order_url); $orderinfo=json_decode($orderinfo,true); $details = $orderinfo["details"]; foreach($details as $v_d){ $price = floatval($v_d["ItmCost"]); $goodsDetail[] = array( "item_code"=>$v_d["strItmID"], "price"=>"$price", "qty"=>$v_d["intQty"], ); } $payments_old = $orderinfo["payments"]; foreach($payments_old as $kp=>$vp){ $pay_type_name = $vp["pay_type_name"]; $pay_type_code_cn = str_replace($ShopOrdID,"",$pay_type_name); $pay_type_code_cn = str_replace("二维码支付","",$pay_type_code_cn); if($pay_type_code_cn == "支付宝"){ $pay_type_code = "zhifubao"; }elseif($pay_type_code_cn == "微信支付"){ $pay_type_code = "weixin"; }elseif($pay_type_code_cn == "现金支付"){ $pay_type_code = "cash"; }elseif($pay_type_code_cn == "刷卡支付"){ $pay_type_code = "yinlian"; }elseif($pay_type_code_cn == "用户余额"){ $pay_type_code = "yuen"; } $payment = floatval($vp["payment"]); $pay_code = $vp["pay_transactionID"]; $paytime = $vp["paytime"]; $paytime = strtotime($paytime)*1000; $payments[] = array( "pay_type_code"=>$pay_type_code, "payment"=>"$payment", "pay_code"=>$pay_code, "paytime"=>$paytime, "account"=>$openid, ); } $buyer = array( "platform_code"=>$ShopOrdID, "vip_code"=>$orderinfo["ShopUserID"], "receiver_address"=>$orderinfo["strAdd"], ); $data = array( "data"=>array( "goodsDetail"=>$goodsDetail, "payments"=>$payments, "buyer"=>$buyer, ), ); $gy_url = "http://vadmin.v.com.cn/CashierSystem.php?actionType=2&CC_UAid=".$_COOKIE["cc_UAid"]."&ShopOrdID=".$ShopOrdID; // var_dump($gy_url); $ch = curl_init();//初始化curl curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_URL, $gy_url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,FALSE); curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS,json_encode($data)); $data_save = curl_exec($ch); $data_save = json_decode($data_save,true); if($data_save["success"]){ $ERP_code = $data_save["code"]; $method = "Order_StateEdit"; $ShopOrdState = "3"; $arr = array("method"=>$method,"ShopOrdState"=>$ShopOrdState,"ShopOrdID"=>$ShopOrdID,"ERP_code"=>$ERP_code); ksort($arr); $i=0; $stringA=''; foreach($arr as $k=>$v){ $stringA=$stringA.$k.$v; } $stringSignTemp=$stringA.$key; $stringSignTemp=str_replace(" ", "%20", $stringSignTemp); $sign=MD5($stringSignTemp); $content = 'method='.$method.'&ShopOrdID='.$ShopOrdID."&ShopOrdState=".$ShopOrdState."&ERP_code=".$ERP_code; $content .= '&Sign='.$sign; $order_url='http://api.v.com.cn/order/?'.$content; $order_url=str_replace(" ", "%20", $order_url); // var_dump($url);exit; $orderinfo=file_get_contents($order_url); $orderinfo=json_decode($orderinfo,true); // var_dump($orderinfo);exit; if($orderinfo["result"] == "1"){ $pdo = new PDO('mysql:host=120.24.62.151;dbname=wxordidsave', 'yyjj', 'zsh56ynyj!2w',array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8")); $sql = "UPDATE `order` SET `order_send` = '2' WHERE `order_long` = '$out_trade_no'"; $pdo->exec($sql); $succCode = 1; return $result; } } } } //用户支付中 else if($result["trade_state"] == "USERPAYING"){ $succCode = 2; return $succCode; } } //如果返回错误码为“此交易订单号不存在”则直接认定失败 elseif($result["err_code"] == "ORDERNOTEXIST") { $succCode = 0; return $result; }else{ //如果是系统错误,则后续继续 $succCode = 3; return $result; } } /** * * 撤销订单,如果失败会重复调用10次 * @param string $out_trade_no * @param 调用深度 $depth */ public function cancel($out_trade_no, $depth = 0) { if($depth > 10){ return false; } $clostOrder = new WxPayReverse(); $clostOrder->SetOut_trade_no($out_trade_no); $result = WxPayApi::reverse($clostOrder); //接口调用失败 if($result["return_code"] != "SUCCESS"){ return false; } //如果结果为success且不需要重新调用撤销,则表示撤销成功 if($result["result_code"] != "SUCCESS" && $result["recall"] == "N"){ return true; } else if($result["recall"] == "Y") { return $this->cancel($out_trade_no, ++$depth); } return false; } }