config = $this->getConfig(); $this->app = new Application($this->config); } /** * @notes 配置 * @return array * @throws \Exception * @author 段誉 * @date 2023/2/27 12:03 */ protected function getConfig() { $config = WeChatConfigService::getMnpConfig(); if (empty($config['app_id']) || empty($config['secret'])) { throw new \Exception('请先设置小程序配置'); } return $config; } /** * @notes 小程序-根据code获取微信信息 * @param string $code * @return array * @throws Exception * @throws \EasyWeChat\Kernel\Exceptions\HttpException * @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException * @throws \Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface * @throws \Symfony\Contracts\HttpClient\Exception\DecodingExceptionInterface * @throws \Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface * @throws \Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface * @throws \Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface * @author 段誉 * @date 2023/2/27 11:03 */ public function getMnpResByCode(string $code) { $utils = $this->app->getUtils(); $response = $utils->codeToSession($code); if (!isset($response['openid']) || empty($response['openid'])) { throw new Exception('获取openID失败'); } return $response; } /** * @notes 获取手机号 * @param string $code * @return \EasyWeChat\Kernel\HttpClient\Response|\Symfony\Contracts\HttpClient\ResponseInterface * @throws \Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface * @author 段誉 * @date 2023/2/27 11:46 */ public function getUserPhoneNumber(string $code) { return $this->app->getClient()->postJson('wxa/business/getuserphonenumber', [ 'code' => $code, ]); } /** * @notes 发货 */ public function delivery($order_id,$openid) { $token=Cache::get('mmp_access_token'); if(!$token){ $token=$this->getAccessToken(); } $dateTime = new DateTime(date('Y-m-d H:i:s')); $formattedDateTime = $dateTime->format('Y-m-d\TH:i:s.uP'); return $this->app->getClient()->postJson("wxa/sec/order/upload_shipping_info?access_token=$token", [ 'order_key' =>[ 'order_number_type'=>1, 'out_trade_no'=>$order_id, 'mchid'=>config('payment.wechat.default.mch_id') ], 'logistics_type'=>4, 'delivery_mode'=>'UNIFIED_DELIVERY', 'shipping_list'=>[ ['item_desc'=>'商品'] ], 'upload_time'=>$formattedDateTime, 'payer'=>[ 'openid'=>$openid ] ])->toArray(); } /** * @notes 获取access_token * @return string */ public function getAccessToken() { $token=$this->app->getAccessToken()->getToken(); if($token){ Cache::set('mmp_access_token',$token,7200); return $token; }else{ throw new Exception('获取access_token失败'); } } }