| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- <?php
- namespace common\logic\wechat;
- use common\components\WechatCache;
- use common\enums\StatusEnum;
- use common\helpers\CurlHelper;
- use common\models\order\OrderDetail;
- use common\models\order\OrderExpress;
- use common\models\user\User;
- use common\models\user\UserInfo;
- use EasyWeChat\Factory;
- use common\enums\DeliveryCompanyEnum;
- class WechatMiniProgramLogic
- {
- public static function uploadShippingInfoWechat($params){
- $mall_id = $params['mall_id'];
- $openid = $params['openid'];
- $third_trade_no = $params['third_trade_no'];
- $delivery_mode = $params['delivery_mode'];
- $logistics_type = $params['logistics_type'];
- $receiver_contact = $params['receiver_contact'];
- $item_desc = $params['item_desc'];
- $is_all_delivered = $params['is_all_delivered'] ;
- $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/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);
- }
- }
|