Zalo mini app get Phone Number

Zalo mini app get Phone Number

Bài viết này sẽ hướng dẫn các bạn lấy số điện thoại với ứng dụng mini app

Lưu ý : xin cấp quyền tại trang Quản lý ứng dụng

Dưới đây là luồng mô tả truy xuất thông tin

Code reactjs trên mini app

Ở đây có 3 thông số cần lấy :

  • access_token: truy xuất thông qua API sdk.getAccessToken({...})
  • code: giá trị là token bạn nhận được khi gọi API lấy số điện thoại.
  • secret_key: Khoá bí mật của Zalo App, truy cập https://developers.zalo.me/, phần Quản lý ứng dụng tương ứng để truy xuất thông tin

Đoạn code sau lấy access_token với function getAccessToken:

const [accesstokem, setAccesstokem] = useRecoilState(clienttokenState);
  useEffect(() => {
    getAccessToken({
      success: (accesstoken) => {
        setAccesstokem(accesstoken);
        console.log('xin chao' + accesstoken)
      }, fail: (error) => {
        // xử lý khi gọi api thất bại
        console.log(error);
      }
    });
  }, []);

Đoạn code sau mình để trong component 

import React, { useState, useEffect } from "react";
import { useRecoilState } from "recoil";
import { getPhoneNumber } from "zmp-sdk";
import { Button, Text } from "zmp-ui";
import { getphone, replace84 } from "../config/api";
import { clienttokenState } from "../state";

const Buttomsdt = () => {
  const [sdt, setSdt] = useState("");
  const [accesstokem, setAccesstokem] = useRecoilState(clienttokenState);
  const getSDT = async () => {
    try {
      const data = await getPhoneNumber();
      const { token } = data;

      var data_token = await getphone(accesstokem, token);
      console.log(data_token.data);
      setSdt(replace84(data_token.data.number));
    } catch (error) {
      // Handle API errors gracefully (e.g., display an error message)
      console.error("Error fetching phone number:", error);
    }
  };

  return (
    <>
      <Button variant="primary" onClick={getSDT}>Get sdt</Button>
      <p>{sdt}</p>
    </>
  );
};

export default Buttomsdt;

function getphone

export const getphone = async (accesstoken: string, code: string) => {
  var secretKey = 'xxx';
  let data_return = await fetch(base_url_api + '?code=' + code + '&accesstoken=' + accesstoken + '&secretkey=' + secretKey);
  //console.log(data_return.json());
  return data_return.json();
}
export const replace84 = (str: string) => {
  return str.replace(/^84/, "0");
}

Code trên server php

Ở đây mình code laravel .Dưới đây là function trong controller .Bạn upload lên domain của mình .Lưu ý ở đây nên mua hosting ở việt nam theo quy định mới của zalo về truy xuất dữ liệu

.Domain này mình const ở base_url_api trên

  public function getsdt(Request $request)
//    public function getsdt(Request $request,?string $endpoint= 'https://graph.zalo.me/v2.0/me/info')
    {

        $endpoint = $request->endpoint ?? 'https://graph.zalo.me/v2.0/me/info';
        if(isset($request->accesstoken)){
            $userAccessToken = $request->accesstoken;
        }else{
            return self::responseapi(0,'thiếu accesstoken');
        }
        if(isset($request->code)){
            $code = $request->code;
        }else{
            return self::responseapi(0,'thiếu code');
        }
        if(isset($request->secretkey)){
            $secretKey = $request->secretkey;
        }else{
            return self::responseapi(0,'thiếu secretKey');
        }
        $options = [
            CURLOPT_URL => $endpoint,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_POST => false,
            CURLOPT_HTTPHEADER => [
                "access_token: $userAccessToken",
                "code: $code",
                "secret_key: $secretKey",
            ],
        ];
        $ch = curl_init($endpoint);
        curl_setopt_array($ch, $options);
        $response = curl_exec($ch);
        curl_close($ch);
        if (curl_errno($ch)) {
            echo 'Error: ' . curl_error($ch);
        } else {

            $data = json_decode($response);
            // Print or handle the response body and coder
            //dd($data->error);
            //dd($data->message);
            //dd($data->data->number);
            return response()->json($data);
//            echo 'Response Code: ' . curl_getinfo($ch, CURLINFO_HTTP_CODE);
//            echo "\nResponse Body:\n" . $response;
        }
       

    }