13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

创新互联百度小程序教程:SessionKey

Session Key

接口说明

智能小程序在其服务端中发送 POST 请求到百度 oauth2.0 授权服务地址,并带上对应的参数,便可获取到 Session Key 。

接口地址

获取 Session Key 的 URL 地址 :

 
 
 
  1. https://spapi.baidu.com/oauth/jscode2sessionkey

为了让您的智能小程序运行在联盟 App 上,我们对获取 SessionKey 的接口做了升级。新接口可以兼容获取百度内部 App 和百度外部 App 的 SessionKey。

您只需要将原接口地址

 
 
 
  1. https://openapi.baidu.com/nalogin/getSessionKeyByCode

更改为

 
 
 
  1. https://spapi.baidu.com/oauth/jscode2sessionkey

即可让您的智能小程序在其它 App 上自动实现账号关联。

方法参数

Header 参数

参数名 类型 是否必须 描述
Content-Type Application/x-www-form-urlencoded HTTP 的实体首部字段,浏览器原生 form 表单

post 参数

参数名 是否必须 说明
code 通过 swan.getLoginCode 获取 Authorization Code
特殊说明:code 中有@符号时,会请求对应的开源宿主,用户身份校验及 SessionKey 生成过程由开源宿主实现
client_id 智能小程序的 AppKey
智能小程序 AppKey 示例:4fecoAqgCIUtzIyA4FAPgoyrc4oUc25c
sk 智能小程序的 AppSecret

若参数无误,服务器将返回一段 JSON 文本,包含以下数据

字段名 说明
openid 用户身份标识,由 appid 和 uid 生成
不同用户登录同一个小程序获取到的 openid 不同,同一个用户登录不同小程序获取到的 openid 也不同
session_key 用户的 Session Key

返回示例

 
 
 
  1. {
  2. openid: "l214zFqNrEuIEnp6m7Y01sw8yj",
  3. session_key: "981ce8b151c0599acf7ad1a673c6ff5e"
  4. }

若请求错误,服务器将返回一段 JSON 文本,包含以下参数

字段名 说明
errno 错误码,详情见下方错误码
error 错误描述
error_description 错误描述信息,用来帮助理解和解决发生的错误

返回示例

 
 
 
  1. {
  2. "errno": 10010100,
  3. "error": "parameter is invalid",
  4. "error_description": "Key: 'Code2SessionKeyParam.ClientID' Error:Field validation for 'ClientID' failed on the 'required' tag"
  5. }

错误码

错误码 描述 错误原因自查
10010100 参数错误或 code 的值无效 1 请检查使用 client_id 参数是否是 appKey
2 请检查生成 code 和使用 code 的时间差是否超过了有效期,有效期为 10s
3 请检查生成 code 的小程序的 appKey 和当前请求接口的 client_id 是否一致
10010400 client_id 与 sk 不匹配 1 请联系小程序管理员检查小程序 appSecret 是否有修改
10010300 请求开源宿主失败 1 信息为开源宿主返回,请参考 error_description 描述进行错误自查

请求示例

 
 
 
  1. /**
  2. * 获取sessionkey 方法
  3. * @param string $code 由swan.getLoginCode获取的临时登录凭证
  4. * @param string $clientId 小程序appkey
  5. * @param string $sk 小程序appSecretKey
  6. */
  7. function reqGetSessionkey($code, $clientId, $sk)
  8. {
  9. $url = 'https://spapi.baidu.com/oauth/jscode2sessionkey';
  10. $data = array(
  11. "code" => $code,
  12. "client_id" => $clientId,
  13. "sk" => $sk
  14. );
  15. $ret = curlPost($url, $data);
  16. return $ret;
  17. }
  18. /**
  19. * curl POST请求工具类
  20. *
  21. * @param string $url
  22. * 请求的url地址
  23. * @param array $postDataArr
  24. * 传递的数组参数
  25. * @return string 检测结果json字符串
  26. */
  27. function curlPost($url, $postDataArr)
  28. {
  29. $headerArr = array(
  30. "Content-type:application/x-www-form-urlencoded"
  31. );
  32. $curl = curl_init();
  33. curl_setopt($curl, CURLOPT_URL, $url);
  34. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
  35. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
  36. curl_setopt($curl, CURLOPT_POST, 1);
  37. curl_setopt($curl, CURLOPT_POSTFIELDS, $postDataArr);
  38. curl_setopt($curl, CURLOPT_HTTPHEADER, $headerArr);
  39. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  40. $output = curl_exec($curl);
  41. curl_close($curl);
  42. return $output;
  43. }
  44. // 获取sessionkey demo
  45. echo reqGetSessionkey("8ba01454ac57775d3692f5dbfcac7a28NW", "4fecoAqgCIUtzIyA4FAPgoyrc4oUc25c", "xxx");
 
 
 
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "io/ioutil"
  6. "log"
  7. "net/http"
  8. "net/url"
  9. "strings"
  10. "time"
  11. )
  12. //返回数据结构
  13. type response struct {
  14. Errno int `json:"errno"`
  15. Error string `json:"error"`
  16. ErrorDescription string `json:"error_description"`
  17. Openid string `json:"openid"`
  18. SessionKey string `json:"session_key"`
  19. }
  20. /**
  21. * 测试demo
  22. */
  23. func main() {
  24. ret, err := ReqSessionKey("8ba01454ac57775d3692f5dbfcac7a28NW", "myAppKey", "myAppSecret")
  25. fmt.Println(ret, err)
  26. }
  27. func ReqSessionKey(code, clientId, sk string) (*response, error) {
  28. data := make(url.Values)
  29. //由swan.getLoginCode获取的临时登录凭证
  30. data.Add("code", code)
  31. //小程序appkey
  32. data.Add("client_id", clientId)
  33. //小程序appSecretKey
  34. data.Add("sk", sk)
  35. ret, err := netPost("https://spapi.baidu.com/oauth/jscode2sessionkey", &data)
  36. return ret, err
  37. }
  38. /**
  39. * http 请求方法
  40. */
  41. func netPost(urlPath string, data *url.Values) (*response, error) {
  42. req, err := http.NewRequest("POST", urlPath, strings.NewReader(data.Encode()))
  43. req.Header.Add("content-type", "application/x-www-form-urlencoded")
  44. if err != nil {
  45. log.Println(err)
  46. return nil, err
  47. }
  48. client := &http.Client{Timeout: 5 * time.Second}
  49. resp, err := client.Do(req)
  50. if err != nil || resp.Body == nil {
  51. log.Println(err)
  52. return nil, err
  53. }
  54. defer resp.Body.Close()
  55. result, err := ioutil.ReadAll(resp.Body)
  56. if err != nil {
  57. log.Println(err)
  58. return nil, err
  59. }
  60. respData := &response{}
  61. err = json.Unmarshal(result, respData)
  62. if err != nil {
  63. log.Println(err)
  64. return nil, err
  65. }
  66. return respData, nil
  67. }

网站栏目:创新互联百度小程序教程:SessionKey
浏览路径:http://cdbrznjsb.com/article/dphcdsd.html
  • 网站建设专属方案

  • 网站定制化设计

  • 7X24小时服务

  • N对管家服务

让你的专属顾问为你服务