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'; $access_token = json_decode(file_get_contents("http://api.v.com.cn/weixin/?method=weixin_Appid&weixinAPP=1"),true)["access_token"]; $attach = json_decode($result["attach"],true); $ShopOrdID = $attach["ShopOrdID"]; //刷新支付信息 $method = "Order_PayNotify"; $transaction_id = $result["transaction_id"]; $mch_id = $result["mch_id"]; $openid = $result["openid"]; $unionid_url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=$access_token&openid=$openid&lang=zh_CN"; $curl = curl_init(); // 启动一个CURL会话 curl_setopt($curl, CURLOPT_URL, $unionid_url); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true); // 从证书中检查SSL加密算法是否存在 $tmpInfo = curl_exec($curl); //返回api的json对象 //关闭URL请求 curl_close($curl); $unioninfo = json_decode($tmpInfo,true); $unionid = $unioninfo["unionid"]; $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,"unionid"=>$unionid); 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."&unionid=".$unionid; $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); $ShopUserID = urlencode($orderinfo["ShopUserID"]); if(!empty($attach["ShopUserID"])){ $NewShopUserID = $attach["ShopUserID"]; $method = "Order_AddressEdit"; $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); } if($sfxf == "2"){ $succCode = 1; return 1; }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 $kd=>$vd){ if($vd["strItmID"] == "1120-005691"){ $you = "1"; } } if($you && $you == "1"){ $ShopUserID = $orderinfo["ShopUserID"]; $ShopUserID = urlencode($ShopUserID); $method = "User_Recharge"; $RechargeType = "Store"; $RechargeMoney = intval($total_fee); $arr = array("method"=>$method,"ShopOrdID"=>$ShopOrdID,"ShopUserID"=>$ShopUserID,"RechargeType"=>$RechargeType,"RechargeMoney"=>$RechargeMoney); 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.'&ShopUserID='.$ShopUserID.'&RechargeType='.$RechargeType.'&RechargeMoney='.$RechargeMoney; $content .= '&Sign='.$sign; $user_url='http://api.v.com.cn/User/?'.$content; $user_url=str_replace(" ", "%20", $user_url); // var_dump($url);exit; $userinfo=file_get_contents($user_url); $userinfo=json_decode($userinfo,true); $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 1; }else{ $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"]; if(!empty($payments_old)){ foreach($payments_old as $kp=>$vp){ $pay_type_name = $vp["pay_type_name"]; $pay_ID = $vp["pay_ID"]; $pay_tradeID = $vp["pay_tradeID"]; $pay_transactionID = $vp["pay_transactionID"]; if($pay_ID == "" && $pay_tradeID == "" && $pay_transactionID == ""){ }else{ $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"; $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, ); }elseif($pay_type_code_cn == "微信支付"){ $pay_type_code = "weixin"; $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, ); }elseif($pay_type_code_cn == "现金支付"){ $pay_type_code = "cash"; $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, ); }elseif($pay_type_code_cn == "刷卡支付"){ $pay_type_code = "yinlian"; $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, ); }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, ); }elseif($pay_type_code_cn == "线下跨境"){ $pay_type_code = "giftcard"; $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, ); } } } }else{ $payments = []; } $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 1; } } } } //用户支付中 else if($result["trade_state"] == "USERPAYING"){ $succCode = 2; return $succCode; } } //如果返回错误码为“此交易订单号不存在”则直接认定失败 elseif($result["err_code"] == "ORDERNOTEXIST") { $succCode = 0; return $result; }else{ //如果是系统错误,则后续继续 $succCode = 3; return 0; } } /** * * 撤销订单,如果失败会重复调用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; } }