services->setting->mall->get($mall_id, 'mini_program'); $wechat = Factory::miniProgram($mini_program); $token_arr = $wechat->access_token->setCache(new WechatCache())->getToken(); \Yii::$app->custom->logs('token==========:' . json_encode($token_arr)); $url = 'https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token=' . $token_arr['access_token']; $shipping =[ 'item_desc'=>$item_desc, 'contact'=>[ 'receiver_contact'=>$receiver_contact ], ]; if(isset($params['tracking_no'])){ $shipping['tracking_no'] =$params['tracking_no']; $shipping['express_company'] = DeliveryCompanyEnum::getDeliveryIdByName($params['express_company']); } $shipping_list = [$shipping]; $post = [ 'order_key'=>[ 'order_number_type'=>2, 'transaction_id'=>$third_trade_no, ], 'delivery_mode'=>$delivery_mode, 'is_all_delivered'=>$is_all_delivered, 'logistics_type'=>$logistics_type, 'shipping_list'=>$shipping_list, 'upload_time'=>date("c", time()), 'payer'=>[ 'openid'=>$openid, ], ]; \Yii::$app->custom->logs('uploadShippingInfoWechat:request'.json_encode($post)); $res = CurlHelper::postJsonUnicode($url, $post);//请求微信服务端 if($res['errcode']==40001){ $wechat->access_token->setCache(new WechatCache())->getToken(true); self::uploadShippingInfoWechat($params); } var_dump('=====================+++++++++++'.json_encode($res)); \Yii::$app->custom->logs('uploadShippingInfoWechat:response'.json_encode($res)); var_dump(json_encode($res)); } public static function notifyConfirmReceiveWechat($params) { $mall_id = $params['mall_id']; $transaction_id = $params['transaction_id']; $received_time = $params['received_time']; $mini_program = \Yii::$app->services->setting->mall->get($mall_id, 'mini_program'); $wechat = Factory::miniProgram($mini_program); $token_arr = $wechat->access_token->setCache(new WechatCache())->getToken(); \Yii::$app->custom->logs('token==========:' . json_encode($token_arr)); $url = 'https://api.weixin.qq.com/wxa/sec/order/notify_confirm_receive?access_token=' . $token_arr['access_token']; $post = [ 'transaction_id' => $transaction_id, 'received_time' => $received_time, ]; \Yii::$app->custom->logs('notifyConfirmReceiveWechat:request' . json_encode($post)); $res = CurlHelper::postJsonUnicode($url, $post);//请求微信服务端 \Yii::$app->custom->logs('notifyConfirmReceiveWechat:response' . json_encode($res)); } public static function setMsgJumpPath($params) { $mall_id = $params['mall_id']; $mini_program = \Yii::$app->services->setting->mall->get($mall_id, 'mini_program'); $wechat = Factory::miniProgram($mini_program); $token_arr = $wechat->access_token->setCache(new WechatCache())->getToken(); \Yii::$app->custom->logs('token==========:' . json_encode($token_arr)); $url = 'https://api.weixin.qq.com/wxa/sec/order/set_msg_jump_path?access_token=' . $token_arr['access_token']; $post = [ // 'path' => 'pages/public/deliveryInformation', 'path' => '', ]; \Yii::$app->custom->logs('setMsgJumpPath:request' . json_encode($post)); $res = CurlHelper::postJsonUnicode($url, $post);//请求微信服务端 \Yii::$app->custom->logs('setMsgJumpPath:response' . json_encode($res)); } public static function getOrder($params) { $mall_id = $params['mall_id']; $mini_program = \Yii::$app->services->setting->mall->get($mall_id, 'mini_program'); $wechat = Factory::miniProgram($mini_program); $token_arr = $wechat->access_token->setCache(new WechatCache())->getToken(); \Yii::$app->custom->logs('token==========:' . json_encode($token_arr)); $url = 'https://api.weixin.qq.com/wxa/sec/order/get_order?access_token=' . $token_arr['access_token']; $post = [ 'transaction_id' => $params['transaction_id'], ]; \Yii::$app->custom->logs('getOrder:request' . json_encode($post)); $res = CurlHelper::postJsonUnicode($url, $post);//请求微信服务端 \Yii::$app->custom->logs('getOrder:response' . json_encode($res)); return $res; } public static function isTradeManaged($mall_id){ $mini_program = \Yii::$app->services->setting->mall->get($mall_id, 'mini_program'); $wechat = Factory::miniProgram($mini_program); $token_arr = $wechat->access_token->setCache(new WechatCache())->getToken(); \Yii::$app->custom->logs('token==========:' . json_encode($token_arr)); $url = 'https://api.weixin.qq.com/wxa/sec/order/is_trade_managed?access_token=' . $token_arr['access_token']; $post = [ 'appid' => $mini_program['app_id']??'', ]; \Yii::$app->custom->logs('isTradeManaged:request' . json_encode($post)); $res = CurlHelper::postJsonUnicode($url, $post);//请求微信服务端 var_dump($res); \Yii::$app->custom->logs('isTradeManaged:response' . json_encode($res)); } /** * 虚拟发货 * @param $params * @return void * @throws \Exception */ public static function uploadShippingInfoWechatByVirtually($params){ $user = User::findOne(['id'=>$params['user_id']]); $mobile = $user['mobile']; //微信支付 $user_info_model = UserInfo::findOne(['mall_id'=>$params['mall_id'],'user_id'=>$params['user_id'],'platform'=>'mp-wx']); if(empty($user_info_model)){ throw new \Exception("user_id,mp-wx:".$params['user_id'].",user_info_model不存在"); } $params['openid'] = $user_info_model['openid'];; // $logistics_type = 1;//物流模式,发货方式枚举值:1、实体物流配送采用快递公司进行实体物流配送形式 2、同城配送 3、虚拟商品,虚拟商品,例如话费充值,点卡等,无实体配送形式 4、用户自提 $params['logistics_type'] = 3; $params['receiver_contact'] = substr_replace($mobile, '****', 3, 4); $params['item_desc'] = mb_substr($params['item_desc'],0,120); WechatMiniProgramLogic::uploadShippingInfoWechat($params); } /** * 主商城订单发货 * @param $params * @return true|void */ public static function uploadShippingInfoWechatByOrder($params) { $mall_id = $params['mall_id']; $user_id = $params['user_id']; $order_id = $params['order_id']; $order_detail_ids = $params['order_detail_ids']; $second_trade_no = $params['second_trade_no']; $mobile = $params['mobile']; //微信支付 $delivery_mode = 1; $order_detail_rows = OrderDetail::lists(['where'=>[['order_id'=>$order_id]]]); if(count($order_detail_rows)!=count($order_detail_ids)){ $delivery_mode = 2; } $order_detail_list = OrderDetail::lists(['where'=>[['id'=>$order_detail_ids]]]); if(empty($order_detail_list)) throw new \Exception("order_detail_ids:".join(',',$order_detail_ids).",订单详情不存在"); $user_info_model = UserInfo::findOne(['mall_id'=>$mall_id,'user_id'=>$user_id,'platform'=>'mp-wx','status' => StatusEnum::ENABLED]); if(empty($user_info_model))throw new \Exception("user_id,mp-wx:".$user_id.",user_info_model不存在"); $openid = $user_info_model['openid']; $item_desc = ''; foreach ($order_detail_list as $item){ $item_desc.=$item['goods_name'].','; } $is_all_delivered = false; if($delivery_mode==2){ $order_detail_id_arr = []; $order_express_list = OrderExpress::lists(['where'=>[['order_id'=>$order_id]]]); foreach ($order_express_list as $val){ $temp = json_decode($val['order_detail_ids'],true); $order_detail_id_arr = array_merge($order_detail_id_arr,$temp); } if(count($order_detail_rows)==count($order_detail_id_arr)){ $is_all_delivered = true; } } $item_desc =trim($item_desc,','); $params['mall_id'] = $mall_id; $params['openid'] = $openid; $params['third_trade_no'] = $second_trade_no; $params['delivery_mode'] = $delivery_mode; $params['is_all_delivered'] = $is_all_delivered; if(!empty($params['express_no'])){ $logistics_type =1; $params['tracking_no'] = $params['express_no']; $params['express_company'] = $params['express_name']; }else{ $logistics_type = 4; } $params['logistics_type'] = $logistics_type; $params['receiver_contact'] = substr_replace($mobile, '****', 3, 4); $params['item_desc'] = mb_substr($item_desc,0,120); WechatMiniProgramLogic::uploadShippingInfoWechat($params); } }