小程序
小游戏
企业微信
微信支付
扫描小程序码分享
企业微信,公众号的验证都没问题。 不知道为什么小程序验证一直提示token不正确,我方服务器日志排查报错的错误码是-40001
是不是我们小程序的验证不能和其他的企业微信和公众号用一样逻辑,有没有php的范例代码我们核对下错误原因?
目前发现小程序的差异如下:验证时候企业号,企业微信用msg_signature, 小程序用signature。
其他还有差异吗? SHA1的加密我看是一样的
6 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
你的url返回的内容是echostr的字符串,我开始用的是json格式返回,要用text格式
说明文档有待提高,明明说的是json/xml格式(其实应该是请求),
响应却没有说明,一般人都理解成和请求一样的json/xml格式,结果特么的返回竟然是text格式,擦
@ResponseBody@RequestMapping("/sendTips")public String message1(HttpServletRequest request){ //后期数据处理 String echostr = request.getParameter("echostr"); return echostr;}
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
可否取消这个解决问题的标签,加密的方式官方还没在文档标注,我们的加密用的是其他微信方案。其他都能通过。
public
function
VerifyURL(
$sMsgSignature
,
$sTimeStamp
$sNonce
$sEchoStr
, &
$sReplyEchoStr
)
{
if
(
strlen
$this
->m_sEncodingAesKey) != 43) {
return
JOrigin_Wechat_Model_ErrorCode::
$IllegalAesKey
;
}
$pc
=Mage::getModel(
'jorigin_wechat/prpcrypt'
);
->setKey(
->m_sEncodingAesKey);
//verify msg_signature
$array
=
->getSHA1(
->m_sToken,
$ret
[0];
!= 0) {
$signature
[1];
!=
) {
$ValidateSignatureError
$result
->decrypt(
->m_sCorpid);
[0] != 0) {
$OK
/**
* 用SHA1算法生成安全签名
* @param string $token 票据
* @param string $timestamp 时间戳
* @param string $nonce 随机字符串
* @param string $encrypt 密文消息
*/
getSHA1(
$token
$timestamp
$nonce
$encrypt_msg
//排序
try
array
sort(
, SORT_STRING);
$str
= implode(
(JOrigin_Wechat_Model_ErrorCode::
, sha1(
));
catch
(Exception
$e
print
.
"\n"
$ComputeSignatureError
, null);
加密的消息报文验证下一行应该是这样对吗?
$array = array($encrypt_msg, $token, $timestamp, $nonce);
根据您的范例,我看了和我们现在的对比不一样。 是否有加密的范例?
楼上是正确的
我配成功了
public function index() {
if ($this->checkSignature()) {
echo $_GET['echostr'];
} else {
echo 'error';
private function checkSignature() {
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = 'token';
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
你的url返回的内容是echostr的字符串,我开始用的是json格式返回,要用text格式
说明文档有待提高,明明说的是json/xml格式(其实应该是请求),
响应却没有说明,一般人都理解成和请求一样的json/xml格式,结果特么的返回竟然是text格式,擦
可否取消这个解决问题的标签,加密的方式官方还没在文档标注,我们的加密用的是其他微信方案。其他都能通过。
public
function
VerifyURL(
$sMsgSignature
,
$sTimeStamp
,
$sNonce
,
$sEchoStr
, &
$sReplyEchoStr
)
{
if
(
strlen
(
$this
->m_sEncodingAesKey) != 43) {
return
JOrigin_Wechat_Model_ErrorCode::
$IllegalAesKey
;
}
$pc
=Mage::getModel(
'jorigin_wechat/prpcrypt'
);
$pc
->setKey(
$this
->m_sEncodingAesKey);
//verify msg_signature
$array
=
$this
->getSHA1(
$this
->m_sToken,
$sTimeStamp
,
$sNonce
,
$sEchoStr
);
$ret
=
$array
[0];
if
(
$ret
!= 0) {
return
$ret
;
}
$signature
=
$array
[1];
if
(
$signature
!=
$sMsgSignature
) {
return
JOrigin_Wechat_Model_ErrorCode::
$ValidateSignatureError
;
}
$result
=
$pc
->decrypt(
$sEchoStr
,
$this
->m_sCorpid);
if
(
$result
[0] != 0) {
return
$result
[0];
}
$sReplyEchoStr
=
$result
[1];
return
JOrigin_Wechat_Model_ErrorCode::
$OK
;
}
/**
* 用SHA1算法生成安全签名
* @param string $token 票据
* @param string $timestamp 时间戳
* @param string $nonce 随机字符串
* @param string $encrypt 密文消息
*/
public
function
getSHA1(
$token
,
$timestamp
,
$nonce
,
$encrypt_msg
)
{
//排序
try
{
$array
=
array
(
$encrypt_msg
,
$token
,
$timestamp
,
$nonce
);
sort(
$array
, SORT_STRING);
$str
= implode(
$array
);
return
array
(JOrigin_Wechat_Model_ErrorCode::
$OK
, sha1(
$str
));
}
catch
(Exception
$e
) {
print
$e
.
"\n"
;
return
array
(JOrigin_Wechat_Model_ErrorCode::
$ComputeSignatureError
, null);
}
}
加密的消息报文验证下一行应该是这样对吗?
$array = array($encrypt_msg, $token, $timestamp, $nonce);
根据您的范例,我看了和我们现在的对比不一样。 是否有加密的范例?
楼上是正确的
我配成功了
public function index() {
if ($this->checkSignature()) {
echo $_GET['echostr'];
} else {
echo 'error';
}
}
private function checkSignature() {
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = 'token';
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}