diff --git a/extend/payment/WeixinMini.php b/extend/payment/WeixinMini.php index bc486cd6838cb55f780d49a46fead6fd9d79fd7c..e339d4b1bded34c4471a740aa8d5a1f1de7b63d6 100644 --- a/extend/payment/WeixinMini.php +++ b/extend/payment/WeixinMini.php @@ -153,16 +153,7 @@ class WeixinMini $result = $this->XmlToArray($this->HttpRequest('https://api.mch.weixin.qq.com/pay/unifiedorder', $xml)); if(!empty($result['return_code']) && $result['return_code'] == 'SUCCESS' && !empty($result['prepay_id'])) { - // 返回数据 - $pay_data = array( - 'appId' => $this->config['appid'], - 'package' => 'prepay_id='.$result['prepay_id'], - 'nonceStr' => md5(time().rand()), - 'signType' => $ret['data']['sign_type'], - 'timeStamp' => (string) time(), - ); - $pay_data['paySign'] = $this->GetSign($pay_data); - return DataReturn('success', 0, $pay_data); + return $this->PayHandleReturn($ret['data'], $result); } $msg = empty($result['return_msg']) ? '支付异常' : $result['return_msg']; if(!empty($result['err_code_des'])) @@ -172,6 +163,52 @@ class WeixinMini return DataReturn($msg, -1); } + /** + * 支付返回处理 + * @author Devil + * @blog http://gong.gg/ + * @version 1.0.0 + * @date 2019-01-08 + * @desc description + * @param [array] $pay_params [支付参数] + * @param [array] $data [支付返回数据] + */ + private function PayHandleReturn($pay_params = [], $data = []) + { + $result = DataReturn('支付接口异常', -1); + switch($pay_params['sign_type']) + { + // web支付 + case 'NATIVE' : + + break; + + // h5支付 + case 'MWEB' : + + break; + + // 微信中/小程序支付 + case 'JSAPI' : + $pay_data = array( + 'appId' => $this->config['appid'], + 'package' => 'prepay_id='.$data['prepay_id'], + 'nonceStr' => md5(time().rand()), + 'signType' => $pay_params['sign_type'], + 'timeStamp' => (string) time(), + ); + $pay_data['paySign'] = $this->GetSign($pay_data); + $result = DataReturn('success', 0, $pay_data); + break; + + // APP支付 + case 'APP' : + + break; + } + return $result; + } + /** * 获取支付参数 * @author Devil @@ -193,7 +230,7 @@ class WeixinMini 'out_trade_no' => $params['order_no'].GetNumberCode(6), 'spbill_create_ip' => GetClientIP(), 'total_fee' => intval($params['total_price']*100), - 'trade_type' => empty($params['trade_type']) ? 'JSAPI' : $params['trade_type'], + 'trade_type' => empty($params['trade_type']) ? $this->GetTradeType() : $params['trade_type'], 'attach' => empty($params['attach']) ? $params['site_name'].'-'.$params['name'] : $params['attach'], 'sign_type' => 'MD5', ]; @@ -201,6 +238,39 @@ class WeixinMini return DataReturn('success', 0, $data); } + /** + * 获取支付交易类型 + * @author Devil + * @blog http://gong.gg/ + * @version 1.0.0 + * @date 2019-01-08 + * @desc description + */ + private function GetTradeType() + { + $type_all = [ + 'pc' => 'NATIVE', + 'weixin' => 'JSAPI', + 'h5' => 'MWEB', + 'app' => 'APP' + ]; + + // 手机中打开pc版本 + if(APPLICATION_CLIENT_TYPE == 'pc' && IsMobile()) + { + $type_all['pc'] = $type_all['h5']; + } + + // 微信中打开 + $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; + if(!empty($user_agent) && strpos($user_agent, 'MicroMessenger') !== false) + { + $type_all['pc'] = $type_all['weixin']; + $type_all['h5'] = $type_all['weixin']; + } + return isset($type_all[APPLICATION_CLIENT_TYPE]) ? $type_all[APPLICATION_CLIENT_TYPE] : ''; + } + /** * 支付回调处理 * @author Devil