威富通 全付通 中信 支付 PHP 一些问题总结(签名机制,sign:This field is required,no start line ,回调机制,漏单)

本文详细介绍了使用PHP实现威富通支付平台RSA256签名过程中遇到的问题及解决方法,包括公钥私钥生成、格式调整、验签流程以及回调机制的注意事项。

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

威富通 全付通 中信 支付 PHP 一些问题总结(签名机制,sign:This field is required,no start line ,回调机制,漏单)

之前接到一个关于威富通支付的项目 原先的签名方式是MD5 现在升级RSA256的 其中一些发生的问题在这里做下总结

1.签名
首先先通过PHP代码或者linux 的openssl获得一套公钥和私钥(确保服务器内装有openssl并确认版本),或者下载支付宝验签工具(同时支持本地window和mac操作系统)。

PHP代码如下:

$config = array(
“digest_alg” => “sha256”,
“private_key_bits” => 2048, //字节数 512 1024 2048 4096 等 ,不能加引号,此处长度与加密的字符串长度有关系,可以自己测试一下
“private_key_type” => OPENSSL_KEYTYPE_RSA, //加密类型
);
r e s = o p e n s s l p k e y n e w ( res = openssl_pkey_new( res=opensslpkeynew(config);

//提取私钥
openssl_pkey_export($res, $private_key);

//生成公钥
p u b l i c k e y = o p e n s s l p k e y g e t d e t a i l s ( public_key = openssl_pkey_get_details( publickey=opensslpkeygetdetails(res);
// var_dump($public_key);

p u b l i c k e y = public_key= publickey=public_key[“key”];

//显示数据
var_dump( p r i v a t e k e y ) ; / / 私 钥 v a r d u m p ( private_key); //私钥 var_dump( privatekey);//vardump(public_key); //公钥
输出后的格式是每64位带空格的网页显示形式

生成后保存并上传至威富通支付平台,如下图:
在这里插入图片描述上传后可根据在威富通给的demo中的config.php配置私钥从而和上传的公钥做匹配验签(流程demo中自带)

在这里插入图片描述
之后下载平台公钥(如上图)同样配置到config.php配置中来做双重验签(流程demo中自带)

当中发生的问题
sign:This field is required 威富通接口范围msg 或者 通过打印openssl_error_string() 获得no start line
可能情况

  1. RSA密钥格式不对 注意选择PKCS1 2048字节的格式

  2. PHP在config内保存的密钥需要注意增加首位
    例如:
    公钥:
    -----BEGIN PUBLIC KEY-----(换行"\n")
    公钥内容(每64位换行"\n")
    -----END PUBLIC KEY-----

    私钥:
    -----BEGIN PRIVATE KEY-----(换行"\n")
    私钥内容(每64位换行"\n")
    -----END PRIVATE KEY-----

    这里推荐两种方式第一种
    a 用以上形式手动保存两个pem文件(公钥、私钥),通过代码读取文件地址 file_get_contents()
    b 通过PHP代码自动切割完成:
    $private_key = ‘私钥’;
    $public_key = ‘公钥’;
    $search = [
    “-----BEGIN RSA PRIVATE KEY-----”,
    “-----END RSA PRIVATE KEY-----”,
    “\n”,
    “\r”,
    “\r\n”
    ];

         $private_key=str_replace($search,"",$private_key);
         $private_key=$search[0] . PHP_EOL . wordwrap($private_key, 64, "\n", true) . PHP_EOL .     	 $search[1];
    
         $public_key = $this->cfg->C('public_rsa_key');
         $search = [
             "-----BEGIN PUBLIC KEY-----",
             "-----END PUBLIC KEY-----",
             "\n",
             "\r",
             "\r\n"
         ];
         $public_key=str_replace($search,"",$public_key);
         $public_key=$search[0] . PHP_EOL . wordwrap($public_key, 64, "\n", true) . PHP_EOL . $search[1];
    

3.私钥公钥在config.php中的设置错误,注意:私钥是自己生成的私钥而公钥是从威富通中生成的公钥

基本注意了这些RSA验签就能通过了,接下来再说下回调机制:

$this->reqHandler->setParameter(‘notify_url’,)
这是后台异步回调页面
这是支付成功后,威富通系统后台异步回调的连接设置为:该页面所在地址+request.php?method=callback。注:威富通文档中所描述的机制
在这里插入图片描述
实测确实有不少当场认定通知失败,之后补发的情况,所以在建议callback中判定,避免数据重复插入。

$this->reqHandler->setParameter(‘callback_url’,)
这个可配置任意可访问的页面代表用户在支付完成后跳转的页面可以设置为后续的功能页面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值