php接入招行收款通支付国密sm2

本文介绍了在处理招行接口时遇到的国密SM2加密与解密问题,提供了一个基于PHP的实现示例,包括使用Rtgm库的RtSm2和FormatSign类进行签名与验签操作。文章强调了文档清晰度的重要性,并分享了解决过程中的一些特殊处理步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前段时间接了招行的国密sm2,帮大家避避坑

可以参考github sm2加密源码:https://github.com/lpilp/phpsm2sm3sm4

招商相关Issues:关于招行某些接口的数字信封加密 sm2解密失败问题 · Issue #46 · lpilp/phpsm2sm3sm4 · GitHub

相关扩展:

use Rtgm\sm\RtSm2;
use Rtgm\util\FormatSign;

加密:

public function getSign($data)
{
    $sm2 = new RtSm2('base64');
    ksort($data);
    $sign = $sm2->doSign(rawurldecode(http_build_query($data)), $this->privateKey);
    $sign = trim($this->format_cmbc($sign));// 特殊处理
    return $sign;
}

解密:

public function checkSign($data)
{
    $sign = array_get($data, 'sign');
    unset($data['sign'], $data['_url']);
    ksort($data);
    $data = rawurldecode(http_build_query($data));
    $data = urldecode($data);
    $sm2 = new RtSm2('base64');
    $sign = (new FormatSign())->run($sign);// 特殊处理
    $result = $sm2->verifySign($data, $sign, $this->publicKey);
    return $result;
}

其实很简单,文档和网上好多文章云里雾里,希望大家工作愉快!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值