V3版本的签名

需要先准备三个参数:商户id 证书序列号 商户的私钥

商户id

dd10cf55-8138-4c70-b98c-a359b5535595.png

证书序列号

e0d67bab-b1e0-494b-b66a-1bbb94e0e8b3.png

商户的私钥

apiclient_key.pem (这个找不到了可以在后台重新获取一个新的,但是获取新的旧的就不能用了,所以线上如果有在用,就要把新的换上去,不然获取新的,线上还是旧的证书这样就会支付失败)


aeb422be-6840-490c-9ceb-418732b2284b.png
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDC5TmnJb0O1gnG
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
PFkDEp/lCXGbHu+6x7mjeK649e89QK6ybr8+1u8BGEz6ZrV682Mb6MQa/lihv3DT
5wP72QrxR3QtTlCuiktUzHOWDGGunD4APgQ4QtT6yi65+Ez7A+ygIV/CFeaSX42q
Cg2ar4BXFaO5+BYSltyoBcPnXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END PRIVATE KEY-----

签名的流程:

1 获取签名参数(获取提交api的url 时间戳 随机字符串 接口需要的参数)
2.将签名的参数设置组装成为微信要求的格式
3.对数据进行加密
4.获得有一个签名。
下面举一个例子,如 查询申请单状态API 这个是GET请求,构建如下内容https://api.mch.weixin.qq.com/v3/applyment4sub/applyment/business_code/2000002194274660

HTTP请求方法\n
URL\n
请求时间戳\n
请求随机串\n
请求报文主体\n
GET\n
/v3/applyment4sub/applyment/business_code/2000002194274660\n
1623329244\n
asdasdsaddd\n
\n

使用php做签名则如下,伪代码

<?php
$sign_content="GET\n";//请求方式 POST GET PUT DELETE等
$sign_content.="/v3/applyment4sub/applyment/business_code/2000002194274660\n";//这个是接口uri内容
$sign_content.="1623329244\n";//这个是时间戳
$sign_content.="asdasdsaddd\n"//这个是随机字符串
$sing_content.="\n"//这个为接口请求的参数
openssl_sign($sign_content, $raw_sign, '这个是商户的私钥' 'sha256WithRSAEncryption');
$sign         =     base64_encode($raw_sign);//这里就得到签名值了
//得到了签名值要怎么使用呢?
//先组装一下签名等信息的字符串先,到时候要发送请求的时候要用到
$sgin_str     = 'mchid=商户id,nonce_str=随机字符串对应上面的,timestamp=时间戳对应上面的,serial_no=商户证书序列号,signature=刚刚得到的签名';
//这个是在请求头里面加进去,然后发起请求就完成了
//Authorization: WECHATPAY2-SHA256-RSA2048 mchid=商户id,nonce_str=随机字符串对应上面的,timestamp=时间戳对应上面的,serial_no=商户证书序列号,signature=刚刚得到的签名

实际可运行php代码 完整的一个流程 包括签名 发起查询的请求

<?php
function sign($url, $http_method, $timestamp, $nonce, $body, $mch_private_key, $mch_id, $serial_no)
{
   $url_parts      =   parse_url($url);
   $canonical_url  =   ($url_parts['path'] . (!empty($url_parts['query']) ? "?${url_parts['query']}" : ""));
   $message        =
      $http_method . "\n" .
      $canonical_url . "\n" .
      $timestamp . "\n" .
      $nonce . "\n" .
      $body . "\n";
   openssl_sign($message, $raw_sign, $mch_private_key, 'sha256WithRSAEncryption');
   $sign           =   base64_encode($raw_sign);
   if (empty($sign))   return '';
   $token          =   sprintf('mchid="%s",nonce_str="%s",timestamp="%d",serial_no="%s",signature="%s"', $mch_id, $nonce, $timestamp, $serial_no, $sign);
   return $token;
}
$mch_id             =   "1111";//商户id
$serial_no          =   "2222";//商户证书序列号
//这个是商户的私钥 可以本地文件
$mch_private_key    =<<<EOF
-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCbzikvBsorZKJh
ZpLZmcsFTXo2atWVX18ATiRT5k/qacPCSf5cAaVwfE4NghpEHYgGm56/dmkR7CDu
BEIqDmy4plj9lSwfsDJGh+jzbw==
-----END PRIVATE KEY-----
EOF;
//$mch_private_key    =   file_get_contents('/web/xcx_interface/Xcxpay/Certificate/Fws/apiclient_key.pem‘);//商户的私钥本地的文件//用本地文件证书也可以
$url                =   "https://api.mch.weixin.qq.com/v3/applyment4sub/applyment/business_code/2000002194274660";
$sign               =   sign($url, 'GET', time(), md5(time()), '', $mch_private_key, $mch_id, $serial_no);//获取到了签名和其他内容
$header[]           =   'User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36';
$header[]           =   'Authorization:WECHATPAY2-SHA256-RSA2048 ' . $sign;
$header[]           =   'Content-Type: application/json';
$ch                 =   curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSLVERSION, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response           =   curl_exec($ch);
curl_close($ch);
$response_data      =   json_decode($response, true);
print_r($response_data);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容