支付寶小程序獲取手機號碼的的詳細流程。(配置開發設置,具體流程)

支付寶小程序獲取手機號碼跟微信小程序的不一樣,所以獲取的流程也有很多的不同,所以第一步並不是直接寫代碼。

流程如下:

一、登錄支付寶小程序開發管理平臺 ->開發中心->小程序應用->選擇你的小程序(點擊查看)->設置->開發設置

 上圖中的接口加簽方式、IP白名單、應用網關、接口內容加密方式都需要設置。

二、接口加簽方式,點擊後需要授權短信驗證碼驗證身份,然後如下圖:

這裏我模擬使用官方提供的支付寶密鑰生成器生成密鑰就行,步驟如下:

1.下載安裝密鑰生成器:傳送門

 2.下載後直接傻瓜式安裝就行,安裝完畢後運行,進行如下設置:

這裏我們使用的是默認的配置就行,直接點擊生成密鑰,等幾秒鐘密鑰生成後,點擊上傳公鑰。

我們的服務器會需要csr文件,直接點擊獲取csr文件獲取,然後點擊打開文件位置,將csr文件保存到服務器上面(後端驗證簽名和解密需要)。

這時我們就得到了密鑰了,我們複製應用公鑰回到上一步的接口加簽方式頁面。

三、將公鑰粘貼到表單,然後點擊保存設置

設置成功如下:

四、接下來我們需要配置IP白名單

點擊設置->點擊添加規則->選擇配置全量接口

點擊下一步->添加IP地址:

可添加多個IP地址,使用英文逗號隔開->確認添加->二次確認

配置ip白名單完成,接着進行下一步配置

五、配置應用網關

點擊設置:

這裏的網關可以使用域名,同樣可以添加多個網關,使用英文逗號隔開,點擊確定就OK了

六、設置接口內容加密方式

點擊設置:

直接點擊生成就行了。

全部設置後:

七、完成敏感信息申請

開發管理 -> 功能列表 -> 添加功能  -> 獲取會員手機號 -> 用戶信息申請

 

八、小程序獲取手機號碼

獲取支付寶用戶綁定的手機號。因爲需要用戶主動觸發才能發起獲取手機號,所以該功能不由 API 直接調用,需用 button 組件 的點擊來觸發。

///axml
<!-- 授權彈窗 -->
<view class="alert-author" a:if="{{alertPhone}}">
  <view class="alert-mask"></view>
  <view class="alert-content">
    <view class="alert-main">
      <view class="alert-title">授權信息</view>
      <view class="alert-describe">小程序需要您的授權才能獲得更好的服務哦。</view>
    </view>
    <view class="alert-buttons">
      <button open-type="getAuthorize"  scope='phoneNumber' class="alert-button" hover-class="button-active" onGetAuthorize="getUserPhone">確定</button>
    </view>
  </view>
</view>
<!-- 授權彈窗 -->

///js
getUserPhone(e){
    let that = this;
    my.getPhoneNumber({
      success: (res) => {
        let encryptedData = res.response;
        that.setData({
          ['userInfo.phone']: "18290261572",
          alertPhone: false
        })
         my.request({
             url: '你的後端服務端',
             data: encryptedData,
                success: function(result){

             }
         });
      },
      fail: (res) => {
          console.log("獲取失敗",res);
      },
    });
  },

九、java後端解密數據

String response = "小程序前端提交的";

//1. 獲取驗籤和解密所需要的參數
Map<String, String> openapiResult = JSON.parseObject(response,
            new TypeReference<Map<String, String>>() {
            }, Feature.OrderedField);
String signType = "RSA2";
String charset = "UTF-8";
String encryptType = "AES";
String sign = openapiResult.get("sign");
String content = openapiResult.get("response");

//如果密文的
boolean isDataEncrypted = !content.startsWith("{");
boolean signCheckPass = false;

//2. 驗籤
String signContent = content;
String signVeriKey = "你的小程序對應的支付寶公鑰(爲擴展考慮建議用appId+signType做密鑰存儲隔離)";
String decryptKey = "你的小程序對應的加解密密鑰(爲擴展考慮建議用appId+encryptType做密鑰存儲隔離)"
;
//如果是加密的報文則需要在密文的前後添加雙引號
if (isDataEncrypted) {
    signContent = "\"" + signContent + "\"";
}
try {
    signCheckPass = AlipaySignature.rsaCheck(signContent, sign, signVeriKey, charset, signType);
} catch (AlipayApiException e) {
    //驗籤異常, 日誌
}
if(!signCheckPass) {
    //驗籤不通過(異常或者報文被篡改),終止流程(不需要做解密)
    throw new Exception("驗籤失敗");
}

//3. 解密
String plainData = null;
if (isDataEncrypted) {
    try {
        AlipayEncrypt.decryptContent(content, encryptType, decryptKey, charset);
    } catch (AlipayApiException e) {
        //解密異常, 記錄日誌
       throw new Exception("解密異常");
    }
} else {
    plainData = content;
}

 

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