業務需求
使用支付寶小程序獲取用戶手機號
遇到的問題
- 和 js/java 對接接口時,遇到 php 端拿不到 POST 的數據問題
- mcrypt_decrypt() 函數的坑,解決了, 關鍵詞 PHPAES 密鑰
- 支付寶小程序:后端解密測試
- 解密成功之后得到的明文是:ISV權限不足,建議在開發者中心檢查對應功能是否已經添加,解決辦法詳見:https://docs.open.alipay.com/common/isverror
問題解決過程
php 端拿不到 POST 的數據問題
https://www.cnblogs.com/tugenhua0707/p/8975615.html 關鍵點在於:HTTP請求中 request payload 和 formData 區別
$this->request->input('json_decode', true); 或者 js 端請求時加上:headers:{'content-type':'application/x-www-form-urlencoded'}
mcrypt_decrypt() 函數的坑
mcrypt_decrypt() 在調用時報出了 warning:mcrypt_decrypt() Encryption mode requires an initialization vector of size 16
對比alipay_sdk的最新版本 AopEncrypt.php 中的解密方法decrypt($str,$screct_key),發現 $iv 只定義了但是沒有用到,不知道是當時開發的人漏掉了還是?
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC),1);
$encrypt_str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $screct_key, $str, MCRYPT_MODE_CBC);
果斷下載新版 alipay_sdk 拿來 AopEncrypt.php 中的解密方法decrypt($str,$screct_key) 用了。
下載新版 alipay_sdk 時發生了一個小插曲,下載后的zip文件不可用,bing.com 查了一下,用 safari 下載成功了。
ISV權限不足
分析有可能是:在小程序管理中心沒有添加「獲取個人手機號」這項,但問題是添加時沒有找到這項,難道只有企業賬號有「獲取個人手機號」這項?
https://opendocs.alipay.com/mini/introduce/getphonenumber 獲取會員手機號,產品介紹,里面說到:目前,獲取會員手機號功能僅對企業開發者開放。
在設置應用網關時注意:服務器對支付寶的接口地址,不用寫全的,要寫 https://xx.xx.cn/api
資料清單
https://opendocs.alipay.com/mini/introduce/getphonenumber 獲取會員手機號,產品介紹,里面說到:目前,獲取會員手機號功能僅對企業開發者開放。
https://blog.csdn.net/diandianxiyu_geek/article/details/86250490 PHP 獲取用戶敏感信息手機號 驗簽解密 RSA解密 AES解密
https://www.jianshu.com/p/54a027ed96f8 這篇把PHP的AES加解密說的很細致