评论

PHP小程序API加密,踩坑后有感,可以直接粘贴复制使用

关于小程序服务端发送请求前需要加密的技术踩雷

数据都是官方文档上面的,可以直接复制使用

// 与文档一样
$key = [
    "Sn" => "fa05fe1e5bcc79b81ad5ad4b58acf787",
    "Key" => "otUpngOjU+nVQaWJIC3D/yMLV17RKaP6t4Ot9tbnzLY="
];
// 与文档一样
// 在原数据内添加安全字段,后组成的data
$data = [
    "_n" => "o89QaPVsRu1yppIZzvSZc4", // 安全字段 随机字符串
    "_appid" => "wxba6223c06417af7b", // 安全字段 appid
    "_timestamp" => 1635927954, // 安全字段 时间戳time()
    "appid" => "wxba6223c06417af7b",
    "openid" => "oEWzBfmdLqhFS2mTXCo2E4Y9gJAM",
    "scene" => 0,
    "client_ip" => "127.0.0.1"
];

// 生成12字节随机字符串iv
// $iv = random_bytes(12);
// 为了与文档同步,base64_encode(iv) = fmW/zNxXlytUZBgj,这里使用base64_decode反向处理
$iv = base64_decode("fmW/zNxXlytUZBgj");

$aad = "https://api.weixin.qq.com/wxa/getuserriskrank|{$data['appid']}|{$data['_timestamp']}|{$key['Sn']}";

// 执行加密
$ciphertext = openssl_encrypt(
    json_encode($data),
    'aes-256-gcm',
    base64_decode($key['Key']),
    OPENSSL_RAW_DATA,
    $iv,
    $tag,
    $aad,
    16
);
// 组织数据
$req_data = array(
    "iv" => base64_encode($iv),
    "data" => base64_encode($ciphertext),
    "authtag" => base64_encode($tag)
);


返回的数据与官方案例的结果一致

最后一次编辑于  2023-08-18  
点赞 0
收藏
评论

1 个评论

  • 我是太阳啊。
    我是太阳啊。
    2023-09-09

    大佬 有python版本的没有啊

    2023-09-09
    赞同
    回复
登录 后发表内容