>  기사  >  백엔드 개발  >  PHP를 사용하여 WeChat 애플릿 SMS 확인 코드를 구현하기 위한 팁

PHP를 사용하여 WeChat 애플릿 SMS 확인 코드를 구현하기 위한 팁

WBOY
WBOY원래의
2023-06-01 09:42:052653검색

WeChat 미니 프로그램의 인기에 따라 점점 더 많은 개발자가 WeChat 미니 프로그램을 사용자에게 보다 편리한 경험을 제공하기 위한 개발 플랫폼으로 사용하기 시작했습니다. 그 중 SMS 인증코드는 사용자 등록, 로그인 및 기타 시나리오에서 없어서는 안 될 부분입니다. 이 기사에서는 주로 PHP를 사용하여 WeChat 미니 프로그램에 대한 SMS 인증 코드를 구현하는 방법을 소개합니다.

1. WeChat access_token 획득

WeChat API를 사용하기 전에 먼저 access_token을 획득해야 합니다. Access_token은 WeChat API에 대한 호출 자격 증명입니다. WeChat API를 호출할 때마다 access_token이 요청 헤더에 포함되어야 합니다. 구체적인 획득 방법은 다음과 같습니다.

  1. WeChat 공개 플랫폼에서 미니 프로그램을 만든 후 미니 프로그램 개발 설정에서 appId 및 appSecret을 확인하세요.
  2. access_token을 얻기 위해 appId 및 appSecret을 기반으로 HTTP GET 요청을 보냅니다. 구체적인 코드는 다음과 같습니다.
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret;
$res = json_decode(file_get_contents($url), true);
$access_token = $res['access_token'];

2. 무작위 인증 코드 생성

무작위 인증 코드 생성 과정은 매우 간단합니다. PHP에 내장된 Rand 함수를 사용하면 됩니다. 구체적인 코드는 다음과 같습니다.

$code = rand(1000, 9999);

3. SMS API를 호출하여 인증 코드를 보냅니다.

access_token을 획득하고 임의의 인증 코드를 생성한 후 SMS API를 호출하여 인증 코드를 보낼 수 있습니다. 여기서는 Tencent Cloud SMS를 예로 들어보겠습니다. 다른 SMS 서비스 제공업체도 비슷합니다.

  1. Tencent Cloud SMS 콘솔에서 애플리케이션을 생성하고 애플리케이션 ID, 애플리케이션 키, SMS 템플릿 ID를 얻습니다.
  2. 애플리케이션 ID와 애플리케이션 키를 기반으로 서명을 생성하고, SMS 템플릿 ID와 임의 인증 코드를 기반으로 SMS 콘텐츠를 생성하세요.
  3. Tencent Cloud SMS API를 사용하여 문자 메시지를 보내세요. 구체적인 코드는 다음과 같습니다.
// 生成签名
$timestamp = time();
$sig = md5("appkey=".$appkey."&timestamp=".$timestamp);

// 生成短信内容
$content = "【签名】验证码为:".$code.",有效期5分钟,请勿泄露。如非本人操作,请忽略本短信。";

// 发送短信
$url = "https://yun.tim.qq.com/v5/tlssmssvr/sendsms?sdkappid=".$sdkappid."&random=".rand();
$data = array(
    "tel" => array("nationcode" => "86", "mobile" => $mobile),
    "type" => 0,
    "msg" => $content
);
$data = json_encode($data);
$header = array(
    "Content-type: application/json",
    "Authorization: ".$sig,
    "Timestamp: ".$timestamp
);
$options = array(
    "http" => array(
        "method" => "POST",
        "header" => implode("
", $header),
        "content" => $data
    )
);
$res = json_decode(file_get_contents($url, false, stream_context_create($options)), true);

4. 인증코드를 Redis에 저장

인증코드의 유효기간을 보장하기 위해서는 생성된 랜덤 인증코드를 Redis에 저장하고 유효기간을 설정해야 합니다. 구체적인 코드는 다음과 같습니다.

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->setex($mobile, 300, $code);

5. 전체 코드

function send_sms($mobile, $appid, $appsecret, $sdkappid, $appkey, $templateid)
{
    // 获取access_token
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
    $res = json_decode(file_get_contents($url), true);
    $access_token = $res['access_token'];

    // 生成随机验证码
    $code = rand(1000, 9999);

    // 发送短信
    $timestamp = time();
    $sig = md5("appkey=".$appkey."&timestamp=".$timestamp);
    $content = "【签名】验证码为:".$code.",有效期5分钟,请勿泄露。如非本人操作,请忽略本短信。";
    $url = "https://yun.tim.qq.com/v5/tlssmssvr/sendsms?sdkappid=".$sdkappid."&random=".rand();
    $data = array(
        "tel" => array("nationcode" => "86", "mobile" => $mobile),
        "type" => 0,
        "msg" => $content
    );
    $data = json_encode($data);
    $header = array(
        "Content-type: application/json",
        "Authorization: ".$sig,
        "Timestamp: ".$timestamp
    );
    $options = array(
        "http" => array(
            "method" => "POST",
            "header" => implode("
", $header),
            "content" => $data
        )
    );
    $res = json_decode(file_get_contents($url, false, stream_context_create($options)), true);

    // 保存验证码到Redis
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);
    $redis->setex($mobile, 300, $code);

    return array("code" => $code);
}

6. 요약

이 글에서는 PHP를 사용하여 access_token 획득, 무작위 인증 코드 생성, 호출 등 WeChat 미니 프로그램용 SMS 인증 코드를 구현하는 방법을 소개합니다. 인증 코드를 보내고 Redis에 저장하는 SMS API입니다. 이 팁은 WeChat 미니 프로그램에만 적용되는 것이 아니라 다른 유형의 애플리케이션에도 사용할 수 있습니다. 이 기사가 모든 사람에게 도움이 되기를 바랍니다.

위 내용은 PHP를 사용하여 WeChat 애플릿 SMS 확인 코드를 구현하기 위한 팁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.