2024-04-26 11:26:12 +08:00
|
|
|
|
<?php
|
|
|
|
|
// +----------------------------------------------------------------------
|
|
|
|
|
// | likeadmin快速开发前后端分离管理后台(PHP版)
|
|
|
|
|
// +----------------------------------------------------------------------
|
|
|
|
|
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
|
|
|
|
|
// | 开源版本可自由商用,可去除界面版权logo
|
|
|
|
|
// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
|
|
|
|
|
// | github下载:https://github.com/likeshop-github/likeadmin
|
|
|
|
|
// | 访问官网:https://www.likeadmin.cn
|
|
|
|
|
// | likeadmin团队 版权所有 拥有最终解释权
|
|
|
|
|
// +----------------------------------------------------------------------
|
|
|
|
|
// | author: likeadminTeam
|
|
|
|
|
// +----------------------------------------------------------------------
|
|
|
|
|
namespace app\common\service\wechat;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
use EasyWeChat\Kernel\Exceptions\Exception;
|
|
|
|
|
use EasyWeChat\MiniApp\Application;
|
2024-05-14 17:23:51 +08:00
|
|
|
|
use support\Cache;
|
2024-04-26 11:26:12 +08:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 微信功能类
|
|
|
|
|
* Class WeChatMnpService
|
|
|
|
|
* @package app\common\service
|
|
|
|
|
*/
|
|
|
|
|
class WeChatMnpService
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
protected $app;
|
|
|
|
|
|
|
|
|
|
protected $config;
|
|
|
|
|
|
|
|
|
|
public function __construct()
|
|
|
|
|
{
|
|
|
|
|
$this->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,
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
2024-05-14 16:11:08 +08:00
|
|
|
|
/**
|
|
|
|
|
* @notes 发货
|
|
|
|
|
*/
|
|
|
|
|
public function delivery()
|
|
|
|
|
{
|
2024-05-14 17:23:51 +08:00
|
|
|
|
$token=Cache::get('mmp_access_token');
|
|
|
|
|
if(!$token){
|
|
|
|
|
$token=$this->getStableAccessToken();
|
|
|
|
|
}
|
|
|
|
|
return $this->app->getClient()->post("wxa/sec/order/upload_shipping_info?access_token=$token", [
|
|
|
|
|
'order_key' =>[
|
|
|
|
|
'order_number_type'=>1,
|
|
|
|
|
'out_trade_no'=>'PF171564998868869065'
|
|
|
|
|
],
|
|
|
|
|
'logistics_type'=>4,
|
|
|
|
|
'delivery_mode'=>'UNIFIED_DELIVERY',
|
|
|
|
|
'shipping_list'=>[
|
|
|
|
|
['item_desc'=>'商品']
|
|
|
|
|
],
|
|
|
|
|
'upload_time'=>date('Y-m-d H:i:s'),
|
|
|
|
|
'payer'=>[
|
|
|
|
|
'openid'=>'onoIP7VVWhCZSWX8zazdNS4KazPE'
|
|
|
|
|
]
|
2024-05-14 16:11:08 +08:00
|
|
|
|
])->toArray();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* @notes 获取access_token
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
2024-05-14 17:23:51 +08:00
|
|
|
|
public function getStableAccessToken()
|
2024-05-14 16:11:08 +08:00
|
|
|
|
{
|
2024-05-14 17:23:51 +08:00
|
|
|
|
$token =$this->app->getClient()->postJson("cgi-bin/stable_token", [
|
|
|
|
|
'grant_type'=>'client_credential',
|
|
|
|
|
'appid'=>$this->config['app_id'],
|
|
|
|
|
'secret'=>$this->config['secret'],
|
|
|
|
|
'force_refresh'=>true
|
|
|
|
|
])->toArray();
|
|
|
|
|
if($token['access_token']){
|
|
|
|
|
Cache::set('mmp_access_token',$token['access_token'],$token['expires_in']);
|
|
|
|
|
return $token['access_token'];
|
|
|
|
|
}
|
2024-05-14 16:11:08 +08:00
|
|
|
|
}
|
|
|
|
|
}
|