阿里雲,AWS,HTTPS和企業支付寶配置

申請證書

  • 登錄:阿里雲控制檯,產品與服務,證書服務,購買證書。
  • 購買:證書類型選擇 免費型DV SSL,然後完成購買。

要來回點擊尋找一下,因爲免費版隱藏了

[外鏈圖片轉存失敗(img-oJWmi8sS-1567235993417)(https://user-images.githubusercontent.com/17243165/38716964-559f0ab2-3f16-11e8-9ced-10ab483be7bc.png)]

配置

等待阿里雲簽發成功,然後在右邊欄目裏面選擇下載

這裏寫圖片描述

安裝證書

文件說明:

  1. 證書文件1523928142501.pem,包含兩段內容,請不要刪除任何一段內容。
  2. 如果是證書系統創建的CSR,還包含:證書私鑰文件1523928142501.key、證書公鑰文件public.pem、證書鏈文件chain.pem。
    ( 1 ) 在Apache的安裝目錄下創建cert目錄,並且將下載的全部文件拷貝到cert目錄中。如果申請證書時是自己創建的CSR文件,請將對應的私鑰文件放到cert目錄下並且命名爲1523928142501.key;
    ( 2 ) 打開 apache 安裝目錄下 conf 目錄中的 httpd.conf 文件,找到以下內容並去掉“#”:
#LoadModule ssl_module modules/mod_ssl.so (如果找不到請確認是否編譯過 openssl 插件)
#Include conf/extra/httpd-ssl.conf

( 3 ) 打開 apache 安裝目錄下 conf/extra/httpd-ssl.conf 文件 (也可能是conf.d/ssl.conf,與操作系統及安裝方式有關), 在配置文件中查找以下配置語句:

# 添加 SSL 協議支持協議,去掉不安全的協議
SSLProtocol all -SSLv2 -SSLv3
# 修改加密套件如下
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
# 證書公鑰配置
SSLCertificateFile cert/public.pem
# 證書私鑰配置
SSLCertificateKeyFile cert/1523928142501.key
# 證書鏈配置,如果該屬性開頭有 '#'字符,請刪除掉
SSLCertificateChainFile cert/chain.pem

( 4 ) 重啓 Apache。
( 5 ) 通過 https 方式訪問您的站點,測試站點證書的安裝配置,如遇到證書不信任問題

這裏注意如果使用阿里雲還要在安全組規則裏面設置443端口的出入方向

Apache反向代理設置https

因爲我是用express框架寫的後端,apache默認佔了80端口,express可以通過反向代理來享用80端口

首先在 httpd.conf 啓用必要的模塊,也就是如果去掉下面這幾行前面的 #

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

Include conf/extra/httpd-ssl.conf

httpd.conf 末端添加如下設置,注意 ProxyPassProxyPassReverse 設置爲express框架暴露的端口,並且設置好 SSLCertificateFileSSLCertificateKeyFile 的路徑,路徑就是上面安裝證書步驟裏面的路徑

<VirtualHost *:80>
	ServerAdmin www.smms.ink
	ServerName www.smms.ink
	ProxyRequests Off
	<Proxy *>
	Order deny,allow
	Allow from all
	</Proxy>
	ProxyPass / http://127.0.0.1:1314/
	ProxyPassReverse / http://127.0.0.1:1314/
</VirtualHost>

<virtualhost *:443>
	ServerName www.smms.ink
	<proxy>
	Order deny,allow
	Allow from all
	</proxy>
	SSLEngine On
	SSLProxyEngine On
	SSLProxyVerify none
	SSLProxyCheckPeerCN off
	SSLProxyCheckPeerName off
	SSLCertificateFile cert/public.pem
	SSLCertificateKeyFile cert/1523928142501.key
	 
	ProxyRequests Off
	ProxyPreserveHost On
	 
	ProxyPass / http://127.0.0.1:1314/
	ProxyPassReverse / http://127.0.0.1:1314/
</virtualhost>

此時當我們訪問 https://www.xxx.com 就等於 訪問到內網的 http://127.0.0.1:1314
這樣對 https://www.xxx.com 的訪問,返回的數據將是來自 http://127.0.0.1:1314

上面的這個配置思路總結爲如下三步:

  1. 正常啓動express項目在1314端口
  2. 然後用apache服務器實現反向代理
  3. 再用apache配置https

Apache和node共享端口

參考文檔Apache和nodejs公用80端口的問題

思路是通過不同域名來區分進去是apache解析還是node解析文件,可以利用二級域名來劃分

ProxyPass / http://127.0.0.1:9000/
ProxyPassReverse / http://127.0.0.1:9000/
/ 映射到  http://127.0.0.1:9000/

你可以根據自己的路由規則來實現不用的需求,例如:

ProxyPass / http://127.0.0.1:9000/
ProxyPassReverse / http://127.0.0.1:9000/

ProxyPass /nodejs http://127.0.0.1:1314
ProxyPassReverse /nodejs http://127.0.0.1:1314

此時我們可以根據不同的二級路由進入內網的不同端口,撥入我們可以把/nodejs分配給node開的1314端口,那麼外網就可以通過https://xxx/nodejs/xxx進入到nodejs的服務器中,對應如果是其他路由就會進入到apache服務器中

企業支付寶接入

接入之前建議先看官方文檔比較詳細

創建應用

首先有企業支付寶賬號,登錄企業支付寶管理中心,登錄不知道是不是安全校驗太頻繁,官網輸入登錄的時候特別卡特別慢,進入開發者中心,因爲我選擇的是網頁&移動應用,要提供網址通過審覈,審覈通過就會出現下面的已上線應用

image

配置RSA密鑰

下載官網中的RSA簽名驗籤工具配置RSA2密鑰,會生成應用公鑰應用密鑰,注意上面選擇中有JAVA適用非JAVA適用的選項,因爲我後端選擇PHP所以我選擇了非JAVA適用的PKCS1

[外鏈圖片轉存失敗(img-VRu73Tmi-1567235993420)(https://user-images.githubusercontent.com/17243165/39089579-46ed64a8-45fd-11e8-9e12-cbf680e1021f.png)]

應用公鑰上傳應用信息中的開發配置中,還有開發配置中的應用網關不是必填項,可以選擇不填,然後將旁邊的支付寶密鑰複製到後端的SDK中的config.php中alipay_public_key字段後,注意應用公鑰是跟支付寶密鑰完全不同的,不要弄錯,不然一會兒驗籤會失敗

[外鏈圖片轉存失敗(img-ukhwOdkR-1567235993421)(https://user-images.githubusercontent.com/17243165/39089606-006b88ec-45fe-11e8-9d0d-3f03364a90a8.png)]

配置服務器

下載對應的SDK文件手機網站支付DEMO,這裏根據對應的需求進行下載,有對應不同後端語言的,我下載的手機網站支付是有包含完整前後端的邏輯的DEMO

一般來說最簡單的測試只需要配置config.php文件就可以了

<?php
$config = array (	
	//應用ID,您的APPID。
	'app_id' => "xxxx",

	//商戶私鑰,您的原始格式RSA私鑰,也就是應用私鑰
	'merchant_private_key' => "xxxx",
		
	//異步通知地址
	//這裏最好用http 支付寶的異步的回調在免費https證書下會失敗
	'notify_url' => "http://工程公網訪問地址/alipay.trade.wap.pay-PHP-UTF-8/notify_url.php",
		
	//同步跳轉
	//'return_url' => "http://mitsein.com/alipay.trade.wap.pay-PHP-UTF-8/return_url.php",
		
	//編碼格式
	'charset' => "UTF-8",

	//簽名方式
	'sign_type'=>"RSA2",

	//支付寶網關
	'gatewayUrl' => "https://openapi.alipay.com/gateway.do",

	//支付寶公鑰,查看地址:https://openhome.alipay.com/platform/keyManage.htm
        //對應APPID下的支付寶公鑰。注意是支付寶公鑰,而不是應用公鑰,支付寶公鑰是基於上傳的應用公鑰生成的
	'alipay_public_key' => "xxxx",
);

這裏注意兩點支付寶公鑰和應用公鑰,不要粘貼錯,這裏需要的是支付寶公鑰而不是應用公鑰,還有點就是notify_url和return_url

return_url是支付成功後在客戶端返回給客戶看的回調地址,需要和開發配置中的授權回調地址對應,這是支付寶對支付的一種校驗,這個地址建議不要寫任何支付後的操作邏輯,因爲用戶有可能會在客戶端切掉看不到而影響邏輯判斷

image

notify_url是支付成功後支付寶通知給服務端的回調地址,這個地址注意要在公網可訪問,因爲支付寶會響應它,所以在本地測試中是不行的,必須上傳到公網服務器,還有這裏注意的是使用阿里雲的免費https證書時候,這裏如果地址是https會有一定失敗率的,也就是說這裏如果用了阿里雲的免費https證書最好還是用回http地址響應,如果響應成功會echo出success這7個字符給支付寶,說明驗籤成功了,所以這個文件不要包含任何html代碼,會影響結果輸出,我們可以把支付後後端需要執行的邏輯放在這裏,比如記錄支付成功等

完整的交易邏輯

最重要就是 WIDout_trade_no 商品訂單號,自己定義的,當我們發送支付到自己後端時候記錄這個訂單號,等支付寶驗籤回來成功後,對比信息中的訂單號完成一個完整的支付邏輯,還要注意的是支付寶應該是隻能用form表單提交支付請求,因爲返回來的是一個form的代碼,當然你也可以動態創建form來發送支付請求,但我個人建議還是直接靜態form的形式來得方便

APP和網頁支付

注意APP和網頁都要各自通過簽約纔可以調用支付接口的,之前在這裏浪費了很久時間一直測試都是報ALIN10146錯誤就是因爲忘記還沒有APP簽約

2018-11-23 11 17 41

APP內支付要真機連接查看返回的參數,注意後臺PHP返回給APP的簽名是不需要htmlspecialchars,不然這裏會幫你把&&amp,這裏正確是&,不然APP支付會報ALIN10146

// 注意:這裏不需要使用htmlspecialchars進行轉義,直接返回即可
echo $response;
//echo htmlspecialchars($response);//就是orderString 可以直接給客戶端請求,無需再做處理。

AWS

亞馬遜雲服務器官網
可以把在本地ssh-keygen命令生成的Githubssh私鑰上傳上去,然後在創建服務器時候使用密鑰對來生成鑰匙,然後使用microsoft remote desktop for mac進行連接,可以導入rtp文件,配合本地的公鑰來進行解析密碼登錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章