После двух дней возни я с перерывами прошел процесс получения пользовательских данных в фоновом режиме этого апплета WeChat.
Затем запишите урожай за последние несколько дней.
Прежде всего, мы можем увидеть официальную документацию апплета WeChat.wx.login
Благодаря этой картинке мы знаем, что интерфейс должен передать код серверу, а сервер получает код и объединяет appid и appsecret для запроса службы интерфейса WeChat и получения openid и session_key.
Глядя на документацию, мы можем четко знать
Чтобы получить пользовательские данные в фоновом режиме, переднему плану необходимо передать код в дополнение к коду.ivа такжеencryptedData
Получите эти два в фоновом режиме и объедините полученный session_key, взяв код запроса на расшифровку данных пользователя, включая аватар, никнейм, город и т. д.
Итак, как получить этот iv и зашифрованные данные на переднем плане?
Легко пройтиwx.getUserInfo
wx.getUserInfo({
success: function(res) {
var iv= res.iv
var .encryptedData=res.encryptedData
}
})
Затем передайте код iv и зашифрованные данные на фон поста через запрос
wx.login({
success: function (res) {
console.log(res.code)
if (res.code) {
wx.getUserInfo({
withCredentials: true,
success: function (res_user) {
wx.request({
//后台接口地址
url: '你后台的接口的地址',
data: {
code: res.code, // code 必须给
encryptedData: res_user.encryptedData, //密文串 必须给
iv: res_user.iv //加密初始量 必给
},
method: 'GET',
header: {
'content-type': 'application/json'
},
success: function (res) {
wx.setStorageSync('openId', res.data.openId); //拿到openid 存入session
}
})
}
Итак, за кулисамиLaravel 5.4часть
Во-первых, мы определяем интерфейс (в первый раз, когда я определяю маршрут в web.php, он будет ограничен требованием публикации токена, поэтому я могу рассмотреть возможность его написания в api.php)
После этого переходим к контроллеру
Перед этим установите пакет guzzlehttp/guzzle для отправки запросов в сервис интерфейса WeChat.
прямая установкаcomposer require guzzlehttp/guzzle
Как использовать также очень просто, не нужно ничего устанавливать непосредственно на контроллерuse GuzzleHttp\Client;
Затем создайте таблицу allusers, чтобы поместить пользователя openid nickName и т. д.
затем пройтиphp artisan make:model AllusersСоздатьEloquent ORMМодель
и определите имя таблицы и первичный ключ в модели
class Alluser extends Model
{
protected $table = 'allusers';
//public $timestamps = false; //这个是看你是否要向表中传建立时间和更新数据时间
protected $primaryKey='openid';
}
потом
Качаем официальный WeChatРасшифрованный документ версии PHP, и внедрить его в многоразовый контроллер для использования
Разархивируйте, чтобы получить файл PHP. Создайте файл Common под приложением и поместите его в файл PHP.
Затем перейдите в «карту классов» «автозагрузки» в composer.json: добавьте «app/Common/PHP/»
следующим образом
"autoload": {
"classmap": [
"database",
"app/Common/PHP/"
],
Затем выполните в каталогеcomposer dumpautoloadты сможешь
Наконец, мы можем написать код для получения openid и session_key, шифрования и дешифрования, а также хранения данных под нашим контроллером.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Input;
use GuzzleHttp\Client;
use App\Model\Alluser;
class apiController extends Controller
{
// 获取微信用户信息
public function getcode(Request $request)
{
$code = $request->get('code');
$encryptedData = $request->get('encryptedData');
$iv = $request->get('iv');
$appid = "你的appid";
$secret = "你的secret";
$client = new \GuzzleHttp\Client();
$res = $client->request('GET', 'https://api.weixin.qq.com/sns/jscode2session', [
'query' => ['appid' =>$appid,
'secret' => $secret,
'js_code' => $code,
'grant_type' => 'authorization_code']
]);
$body = json_decode($res->getBody());
$openid = $body->openid;
$session_key = $body->session_key;
$userifo = new \WXBizDataCrypt($appid, $session_key);
$errCode = $userifo->decryptData($encryptedData, $iv, $data);
$info = json_decode($data);
$nickName = $info->nickName;
$avatarUrl = $info->avatarUrl;
$province = $info->province;
$city = $info->city;
$alluser = new Alluser();
if (!$alluser->find($openid))
{
$alluser->openid = $openid;
$alluser->session_key = $session_key;
$alluser->nickName = $nickName;
$alluser->avatarUrl = $avatarUrl;
$alluser->province = $province;
$alluser->city = $city;
$alluser->save();
}
if ($errCode == 0) {
return ($data);
} else {
return ($errCode);
}
}
}
Наконец, апплет WeChat компилирует и запрашивает 200 данных, и их можно нормально хранить! !