openresty前端開發進階二之https後端
在對接一些第三方系統的時候,經常會遇到https的問題,好比如做微信公眾號的開發,介面基本都是https的,這個時候,很多人試著用http的那種方式來訪問https,結果報錯了,誤以為lua不支援https,其實不是的,只需要配置一個證照即可,證照可以通過瀏覽器訪問介面的url,然後通過瀏覽器匯出這個網站所對應的pem證照,然後配置到nginx裡面就行了,其他的呼叫方法跟http的型別,所用到的http庫,跟我寫的這篇文章一致,就不過多介紹了
nginx.conf
worker_processes 1;
error_log logs/error.log notice;
events {
worker_connections 1024;
}
http {
lua_ssl_verify_depth 2;
lua_ssl_trusted_certificate GeoTrust_Global_CA.pem;
lua_package_path "$prefix/lua/?.lua;$prefix/lualib/?.lua";
server {
listen 8888;
server_name localhost;
lua_code_cache off;
location / {
root html;
index index.html;
}
location ~ /lua/(.+) {
default_type text/html;
resolver 223.5.5.5 223.6.6.6; # 這裡位設定阿里的DNS,不設定DNS無法解析http請求的域名
content_by_lua_file lua/$1.lua;
}
}
}
為了簡單起見,以下只是調一下獲取access_key的介面,只要這個可以,同理,微信下單那些也是一樣的,這點可以保證,我就用openresty做過微信公眾號開發,包含微信登入,微信支付,以及資料庫mysql部分全都是lua開發的
lua/test.lua
local req = require "req"
local cjson = require "cjson"
local http = require "resty.http"
function get_access_token(code)
local httpc = http.new()
local params = {}
params[`grant_type`] = `authorization_code`
params[`appid`] = `` -- config.appid
params[`secret`] = `` -- config.secret
params[`code`] = ``
local res,err = httpc:request_uri("https://api.weixin.qq.com/sns/oauth2/access_token?" .. ngx.encode_args(params), {
method = "GET",
headers = {
["Accept"] = "application/json",
["Accept-Encoding"] = "utf-8",
}
})
print(err)
httpc:set_keepalive(60)
return cjson.decode(res.body)
end
local args = req.getArgs()
local code = args[`code`]
local res = get_access_token(code)
ngx.say(cjson.encode(res))
ngx.say(res.openid)
index.html
<html>
<head>
<meta charset="UTF-8">
<title>Login Page</title>
</head>
<body>
<a href="javascript:void(0)" onclick="test()">測試</a>
<pre id="ret"></pre>
<script src="//cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script>
<script>
function test() {
$(`#ret`).load(`/lua/test`, {code: `123456`})
}
</script>
</body>
</html>
啟動nginx
$ openresty -p `pwd`/demo13
開啟瀏覽器訪問:http://localhost:8888/ 點選頁面上的測試按鈕
應該會返回類似以下這樣的東西,說明呼叫成功了,只是引數有問題而已
{"errcode":41002,"errmsg":"appid missing, hints: [ req_id: eMR_KA0444ns88 ]"}
nil
到此,你可以用openresty更深層次的跟後端進行整合,開發出更強大的前端應用了,當前開發方式很簡單,部署也只需要一個nginx
示例程式碼 參見demo13部分
相關文章
- openresty前端開發入門二REST前端
- openresty前端開發序REST前端
- openresty前端開發入門三之JSON篇REST前端JSON
- openresty前端開發入門四之Redis篇REST前端Redis
- openresty前端開發入門五之Mysql篇REST前端MySql
- 前端進階之困前端
- 高階前端的進階——CSS之flex前端CSSFlex
- 【Flutter】開發之進階Widget(三)Flutter
- 【Flutter】開發之進階Widget(五)Flutter
- 前端開發和後端開發,哪個薪酬更高?前端後端
- 前端和後端開發的異同前端後端
- 前端基礎之jQuery進階前端jQuery
- OPPO 後端開發 一、二面面經後端
- mockjs讓前端開發獨立於後端MockJS前端後端
- 從後端到前端之Vue(二)寫個tab試試水後端前端Vue
- Java後端高階開發面試技巧解析Java後端面試
- Web前端開發和後端開發有什麼區別?Web前端後端
- 前端開發與後端開發的區別是什麼?前端後端
- Chrome 效率神器 Steward 進階之 plugin 開發ChromePlugin
- 使用 Kotlin + Spring Boot 進行後端開發KotlinSpring Boot後端
- 【Android進階】RecyclerView之快取(二)AndroidView快取
- web前端進階篇(二) 瀏覽器 WebpackWeb前端瀏覽器
- Python屬於後端開發還是前端開發?Python入門!Python後端前端
- 前端進階之 JS 抽象語法樹前端JS抽象語法樹
- 前端進階之 Javascript 抽象語法樹前端JavaScript抽象語法樹
- web前端技術分享:前端開發與後端開發的區別是什麼?Web前端後端
- Web 前端開發日誌(二):JavaScript 的二進位制操作Web前端JavaScript
- 讓你成為前端,後端或全棧開發程式設計師的進階指南,一門學到老的技術前端後端全棧程式設計師
- APICloud開發者進階之路 | 編碼優化(二)APICloud優化
- 「真®全棧之路」Web前端開發的後端指南全棧Web前端後端
- 【進階系列】前端開發環境構建(一)CSS -- Sass前端開發環境CSS
- 高階前端進階(三)前端
- 高階前端進階(七)前端
- 高階前端進階(五)前端
- 前端入門13-JavaScript進階之原型前端JavaScript原型
- 社交網站後端專案開發日記(二)網站後端
- Abaqus二次開發入門和進階培訓
- 寫給後端開發工程師的H5前端開發知識後端工程師H5前端