從零搭建微信小程式後臺

千鋒IT技術學習發表於2018-05-16

1.基本硬體準備,以windows server 2008 為例

  //1臺主機

  //1個全球資訊網域名

  //域名通過ssl認證

  //--伺服器端安裝以下--

  //------nginx

  //------wampserver

  //----------Apache

  //----------Mysql

  //----------PHP

  //------node

  //---------express

  //------pm2

  1.以騰訊云為例 伺服器搭建

  1.主機與域名DNS解析

  1.購買雲主機,購買成功以後,如圖:

圖片1.png

  2.購買域名,購買成功並認證,如圖:

圖片2.png

  3.新增域名解析規則:

圖片3.png

  4.SSL 認證:

圖片4.png

  5.ssl 認證

圖片5.png

圖片6.png

圖片7.png

  認證成功,就可以下載證照配置自己伺服器了。

圖片8.png

  不同伺服器具體配置如下:

  參考www.qcloud.com/document/pr…

  2. 筆者使用的是 Nginx 證照部署

  2.1 獲取證照

  Nginx資料夾內獲得SSL證照檔案 1www.domain.com_bundle.crt 和私鑰檔案 2www.domain.com.key, 1_www.domain.com_bundle.crt 檔案包括兩段證照程式碼 “-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----”, 2_www.domain.com.key 檔案包括一段私鑰程式碼“-----BEGIN RSA PRIVATE KEY-----”和“-----END RSA PRIVATE KEY-----”。

  2.2 證照安裝

  將域名 www.domain.com 的證照檔案1www.domain.com_bundle.crt 、私鑰檔案2www.domain.com.key儲存到同一個目錄,例如/usr/local/nginx/conf目錄下。 更新Nginx根目錄下 conf/nginx.conf 檔案如下:

  server {

  listen 443;

  server_name www.domain.com; #填寫繫結證照的域名

  ssl on;

  ssl_certificate 1_www.domain.com_bundle.crt;

  ssl_certificate_key 2_www.domain.com.key;

  ssl_session_timeout 5m;

  ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照這個協議配置

  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照這個套件配置

  ssl_prefer_server_ciphers on;

  location / {

  root html; #站點目錄

  index index.html index.htm;

  }

  }

  配置完成後,先用bin/nginx –t來測試下配置是否有誤,正確無誤的話,重啟nginx。就可以使 https://www.domain.com 來訪問了。

  注:

配置檔案引數

說明

listen 443

SSL

訪問埠號為
443

ssl on

啟用

SSL
功能

ssl_certificate

證照檔案

ssl_certificate_key

私鑰檔案

ssl_protocols

使用的協議

ssl_ciphers

配置加密套件,寫法遵循

openssl
標準

  2.3 使用全站加密,http自動跳轉https(可選)

  對於使用者不知道網站可以進行https訪問的情況下,讓伺服器自動把http的請求重定向到https。 在伺服器這邊的話配置的話,可以在頁面里加js指令碼,也可以在後端程式裡寫重定向,當然也可以在web伺服器來實現跳轉。Nginx是支援rewrite的(只要在編譯的時候沒有去掉pcre) 在http的server裡增加rewrite ^(.*) https://$host$1 permanent; 這樣就可以實現80進來的請求,重定向為https了。

  伺服器配置

  參考文件:github.com/tencentyun/…

  後臺服務原理:

圖片9.png

  2.接下來配置伺服器(以官方三木聊天室demo為例)

  2.1 nginx 配置

  server {

  listen 443;

  server_name www.lovmin.cn; #填寫繫結證照的域名

  ssl on;

  ssl_certificate 1_www.lovmin.cn_bundle.crt;#下載好的證照檔案

  ssl_certificate_key 2_www.lovmin.cn.key;#下載好的證照檔案

  ssl_session_timeout 5m;

  ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照這個協議配置

  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照這個套件配置

  ssl_prefer_server_ciphers on;  ​

  location / {

  proxy_pass localhost:5757;#node伺服器地址與埠,因為同一臺伺服器故使用localhost

  }  ​

  }

  2.2 聊天室 server服務配置

  注意:window server 配置檔案需要手動 sdk.config 建立到 C:\qcloud\sdk.config

  {

  "serverHost": "www.zhangximufeng.com",//伺服器域名

  "authServerUrl": "http://10.141.19.17:8000/",//鑑證伺服器地址(其實就是apache伺服器地址)

  "tunnelServerUrl": "https://ws.qcloud.com",//這個可以不改,通道伺服器地址

  "tunnelSignatureKey": "7fb7d1c161b7ca52d73cce0f1d833f9f5b5ec89",//隨機碼

  "networkTimeout":30000//可不改

  }  ​

  參考文件地址:

  github.com/tencentyun/…

  demo 原始碼

  github.com/tencentyun/…

  2.3 apache 伺服器(鑑證伺服器)配置及資料庫設

  鑑證伺服器

  下載官方 會話伺服器原始碼

  會話伺服器的原始碼

  github.com/tencentyun/…

  選擇合適的方式部署 Wafer 服務後,按照部署型別:

  · 自動部署 - 無需進行任何操作,會話伺服器已經可以使用

  · 映象部署 - 按照下面步驟進行初始化工作

  · 自行部署 - 按照下面步驟進行初始化工作

  環境準備

  確保機器中已安裝 WAMP 環境。Linux server 可以選擇安裝LAMP 環境

  程式碼部署

  把本專案程式碼部署到 /opt/lampp/htdocs/mina_auth 目錄中。

  自動建表

  執行下面命令建立執行時所需表:

  /opt/lampp/bin/mysql -u root -p mypassword < /opt/lampp/htdocs/mina_auth/system/db/db.sql

  初始化 appId 和 appSecret

  登入到 MySql 後,手動插入配置到 cAuth 表中。

  /opt/lampp/bin/mysql -u root -p root #登入本地mysql

  use cAuth;

  insert into cAppinfo set appid='Your appid',secret='Your secret';

  測試服務可用性

  curl -i -d'{"version":1,"componentName":"MA","interface":{"interfaceName":"qcloud.cam.id_skey","para":{"code":"001EWYiD1CVtKg0jXGjD1e6WiD1EWYiC","encrypt_data":"DNlJKYA0mJ3+RDXD/syznaLVLlaF4drGzeZvJFmjnEKtOAi37kAzC/1tCBr7KqGX8EpiLuWl8qt/kcH9a4LxDC5LQvlRLJlDogTEIwtlT/2jBWBuWwBC3vWFhm7Uuq5AOLZV+xG9UmWPKECDZX9UZpWcPRGQpiY8OOUNBAywVniJv6rC2eADFimdRR2qPiebdC3cry7QAvgvttt1Wk56Nb/1TmIbtJRTay5wb+6AY1H7AT1xPoB6XAXW3RqODXtRR0hZT1s/o5y209Vcc6EBal5QdsbJroXa020ZSD62EnlrOwgYnXy5c8SO+bzNAfRw59SVbI4wUNYz6kJb4NDn+y9dlASRjlt8Rau4xTQS+fZSi8HHUwkwE6RRak3qo8YZ7FWWbN2uwUKgQNlc/MfAfLRcfQw4XUqIdn9lxtRblaY="}}}' http://127.0.0.1/mina_auth/

  按照原始碼 db.sql 檔案 建立資料庫

  資料庫設計

  全域性資訊表 cAppInfo 儲存會話服務所需要的配置項。

  Field

  Type

  Null

  key

  Extra

  appid

  varchar(200)

  NO

  PRI

  申請微信小程式開發者時,微信分配的 appId

  secret

  varchar(300)

  NO

  申請微信小程式開發者時,微信分配的 appSecret

  login_duration

  int(11)

  NO

  登入過期時間,單位為天,預設 30 天

  session_duration

  int(11)

  NO

會話過期時間,單位為秒,預設為 2592000 秒(即30天)

  ​會話記錄 cSessionInfo 儲存每個會話的資料。

  Field

  Type

  Null

  key

  Extra

  id

  int(11)

  NO

  MUL

  uuid

  varchar(100)

  NO

  會話 uuid

  skey

  varchar(100)

  NO

  會話 Skey

  create_time

  datetime

  NO

  last_visit_time

  datetime

  NO

  open_id

  varchar(100)

  NO

  MUL

  session_key

  varchar(100)

  NO

  微信服務端返回的 `session_key` 值

  user_info

  varchar(2048)

  YES

  已解密的使用者資料

會話 ID(自增長)

會話建立時間,用於判斷會話對應的 open_id 和 session_key 是否過期(是否超過
cAppInfo
表中欄位
login_duration
配置的天數)

最近訪問時間,用於判斷會話是否過期(是否超過
cAppInfo
表中欄位
session_duration
的配置的秒數)

微信服務端返回的
open_id

  建資料庫的詳細 SQL 指令碼請參考 db.sql

  搭建會話管理伺服器

  伺服器配置注意:

  1、會話伺服器原始碼中連線mysql資料庫的使用者名稱密碼確保與資料庫保持一致

  2、sdk.config檔案在不同server系統中位置不同,具體位置請閱讀sdk原始碼config.js檔案

  3、sdk.config檔案中不能有註釋(後面會把字串轉物件)

  小程式客戶端配置

  參考文件:github.com/tencentyun/…

  demo 地址:github.com/tencentyun/…

  /**

  * 小程式配置檔案

  * config.js

  */  ​

  // 此處主機域名修改成騰訊雲解決方案分配的域名

  var host = 'www.lovmin.com';  ​

  var config = {  ​

  // 下面的地址配合雲端 Demo 工作

  service: {

  host,  ​

  // 登入地址,用於建立會話

  loginUrl: `https://${host}/login`,  ​

  // 測試的請求地址,用於測試會話

  requestUrl: `https://${host}/user`,  ​

  // 測試的通道服務地址

  tunnelUrl: `https://${host}/tunnel`,

  }

  };  ​

  module.exports = config;

  開發者設定

圖片10.png


相關文章