После двух дней возни я с перерывами прошел процесс получения пользовательских данных в фоновом режиме этого апплета WeChat.
Затем запишите урожай за последние несколько дней.
Прежде всего, мы можем увидеть официальную документацию апплета WeChat.wx.login
api-login.jpgБлагодаря этой картинке мы знаем, что интерфейс должен передать код серверу, а сервер получает код и объединяет appid и appsecret для запроса службы интерфейса WeChat и получения openid и session_key.
Глядя на документацию, мы можем четко знать
Чтобы получить пользовательские данные в фоновом режиме, переднему плану необходимо передать код в дополнение к коду.ivа такжеencryptedData
iv и зашифрованные данныеПолучите эти два в фоновом режиме и объедините полученный 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 данных, и их можно нормально хранить! !
Инвентарь.png