public function decrypt($msgSignature, $timestamp = null, $nonce, $postData, &$msg) { if (strlen($this->encodingAesKey) != 43) { return ErrorCode::$IllegalAesKey; } if ($timestamp == null) $timestamp = time(); $pc = new Prpcrypt($this->encodingAesKey); $encrypt = simplexml_load_string($postData, 'SimpleXMLElement', LIBXML_NOCDATA); $encrypt = $encrypt->Encrypt; $sha1 = new SHA1; $array = $sha1->getSHA1($this->token, $timestamp, $nonce, $encrypt); $ret = $array[0]; if ($ret != 0) { return $ret; } $signature = $array[1]; if ($signature != $msgSignature) { return ErrorCode::$ValidateSignatureError; } $result = $pc->decrypt($encrypt, $this->appId); if ($result[0] != 0) { return $result[0]; } $msg = $result[1]; return ErrorCode::$OK; }
public function DecryptMsg($signature, $timeStamp = null, $nonce, $encrypt, &$decryptMsg) { if (strlen($this->m_encodingAesKey) != 43) { return ErrorCode::$IllegalAesKey; } $pc = new Prpcrypt($this->m_encodingAesKey); if ($sTimeStamp == null) { $sTimeStamp = time(); } $sha1 = new SHA1(); $array = $sha1->getSHA1($this->m_token, $timeStamp, $nonce, $encrypt); $ret = $array[0]; if ($ret != 0) { return $ret; } $verifySignature = $array[1]; if ($verifySignature != $signature) { return ErrorCode::$ValidateSignatureError; } $result = $pc->decrypt($encrypt, $this->m_suiteKey); if ($result[0] != 0) { return $result[0]; } $decryptMsg = $result[1]; return ErrorCode::$OK; }
public function decryptMsg($msgSignature, $timestamp = NULL, $nonce, $postData, &$msg) { if (strlen($this->encodingAesKey) != 43) { return ErrorCode::$IllegalAesKey; } $pc = new Prpcrypt($this->encodingAesKey); $xmlparse = new XMLParse(); $array = $xmlparse->extract($postData); $ret = $array[0]; if ($ret != 0) { return $ret; } if ($timestamp == NULL) { $timestamp = time(); } $encrypt = $array[1]; $touser_name = $array[2]; $sha1 = new SHA1(); $array = $sha1->getSHA1($this->token, $timestamp, $nonce, $encrypt); $ret = $array[0]; if ($ret != 0) { return $ret; } $signature = $array[1]; if ($signature != $msgSignature) { return ErrorCode::$ValidateSignatureError; } $result = $pc->decrypt($encrypt, $this->appId); if ($result[0] != 0) { return $result[0]; } $msg = $result[1]; return ErrorCode::$OK; }
public function index() { $encryptMsg = file_get_contents('php://input'); if ($_GET['type'] == 'test') { } $xml_tree = new DOMDocument(); $xml_tree->loadXML($encryptMsg); $xml_array = $xml_tree->getElementsByTagName('Encrypt'); $encrypt = $xml_array->item(0)->nodeValue; $agentid = 0; if (C('agent_version')) { $thisAgent = M('agent')->where(array('siteurl' => 'http://' . $_SERVER['HTTP_HOST']))->find(); $agentid = (isset($thisAgent['id']) ? intval($thisAgent['id']) : 0); } $account = M('Weixin_account')->where(array('type' => 1, 'agentid' => $agentid))->find(); import('@.ORG.aes.WXBizMsgCrypt'); $Prpcrypt = new Prpcrypt($account['encodingAesKey']); $postData = $Prpcrypt->decrypt($encrypt, $account['appId']); if ($postData[0] != 0) { return $postData[0]; } else { $msg = $postData[1]; $xml = new DOMDocument(); $xml->loadXML($msg); $array_a = $xml->getElementsByTagName('InfoType'); $infoType = $array_a->item(0)->nodeValue; if ($infoType == 'unauthorized') { $array_b = $xml->getElementsByTagName('AuthorizerAppid'); $AuthorizerAppid = $array_b->item(0)->nodeValue; $where = array('type' => 1, 'appid' => $AuthorizerAppid); $save = array('authorizer_access_token' => '', 'authorizer_refresh_token' => '', 'authorizer_expires' => 0); M('Wxuser')->where($where)->save($save); } else if ($infoType == 'component_verify_ticket') { $array_e = $xml->getElementsByTagName('ComponentVerifyTicket'); $component_verify_ticket = $array_e->item(0)->nodeValue; if (M('Weixin_account')->where(array('type' => 1, 'agentid' => $agentid))->save(array('component_verify_ticket' => $component_verify_ticket, 'date_time' => time()))) { echo 'success'; } } } }
public function index() { $encryptMsg = file_get_contents("php://input"); if ($_GET['type'] == 'test') { //file_put_contents('testMsg.txt',$encryptMsg); } else { //file_put_contents('encryptMsg.txt',$encryptMsg); } $xml_tree = new DOMDocument(); $xml_tree->loadXML($encryptMsg); $xml_array = $xml_tree->getElementsByTagName('Encrypt'); $encrypt = $xml_array->item(0)->nodeValue; $account = M('Weixin_account')->where(array('type' => 1))->find(); import("@.ORG.aes.WXBizMsgCrypt"); //$WXBizMsgCrypt= new WXBizMsgCrypt('',$account['encodingAesKey'],$account['appId']); $Prpcrypt = new Prpcrypt($account['encodingAesKey']); $postData = $Prpcrypt->decrypt($encrypt, $account['appId']); if ($postData[0] != 0) { return $postData[0]; } else { $msg = $postData[1]; $xml = new DOMDocument(); $xml->loadXML($msg); $array_a = $xml->getElementsByTagName('InfoType'); $infoType = $array_a->item(0)->nodeValue; //file_put_contents('infoType.txt',$infoType); if ($infoType == 'unauthorized') { $array_b = $xml->getElementsByTagName('AuthorizerAppid'); $AuthorizerAppid = $array_b->item(0)->nodeValue; $where = array('type' => 1, 'appid' => $AuthorizerAppid); $save = array('authorizer_access_token' => '', 'authorizer_refresh_token' => '', 'authorizer_expires' => 0); M('Wxuser')->where($where)->save($save); } else { if ($infoType == 'component_verify_ticket') { $array_e = $xml->getElementsByTagName('ComponentVerifyTicket'); $component_verify_ticket = $array_e->item(0)->nodeValue; if (M('Weixin_account')->where(array('type' => 1))->save(array('component_verify_ticket' => $component_verify_ticket, 'date_time' => time()))) { echo 'success'; } } } } }
/** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index($msg_signature, $timestamp, $nonce) { // $msg_signature = urldecode($msg_signature); $timestamp = urldecode($timestamp); $nonce = urldecode($nonce); $echostr = I('echostr'); $echostr = urldecode($echostr); if ($echostr) { //验证签名 if (QyHelper::isSigValid($msg_signature, $this->token, $timestamp, $nonce, $echostr)) { $prpcrypt = new Prpcrypt($this->aeskey); //解密 $content = $prpcrypt->decrypt($echostr, $this->corpid); if ($prpcrypt->isSuccess()) { Yii::$app->response->format = Response::FORMAT_RAW; \Yii::$app->response->data = $content; return \Yii::$app->response; } else { $prpcrypt->printErr(); } } else { echo '应用签名校验失败,请检查网站、token、aeskey等配置'; } } else { $msg_xml = I('xml'); if (empty($msg_xml)) { $msg_xml = file_get_contents("php://input"); } if (empty($msg_xml)) { $msg_xml = $GLOBALS["HTTP_RAW_POST_DATA"]; } $msg = QyHelper::decryptMsg($msg_xml, $this->aeskey, $this->corpid); //TODO:后续需要完善,消息接收与推送这块的功能 //这里需要能区分是哪个租户的哪个应用发来的消息 // Yii::warning('记录交互信息:'.$msg,'wx'.__LINE__); } }
/** * For weixin server validation * @param bool $return 是否返回 */ public function valid($return = false) { $encryptStr = ""; if ($_SERVER['REQUEST_METHOD'] == "POST") { $postStr = file_get_contents("php://input"); $array = (array) simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $this->encrypt_type = isset($_GET["encrypt_type"]) ? $_GET["encrypt_type"] : ''; if ($this->encrypt_type == 'aes') { //aes加密 $this->log($postStr); $encryptStr = $array['Encrypt']; $pc = new Prpcrypt($this->encodingAesKey); $array = $pc->decrypt($encryptStr, $this->appid); if (!isset($array[0]) || $array[0] != 0) { if (!$return) { die('decrypt error!'); } else { return false; } } $this->postxml = $array[1]; if (!$this->appid) { $this->appid = $array[2]; } //为了没有appid的订阅号。 } else { $this->postxml = $postStr; } } elseif (isset($_GET["echostr"])) { $echoStr = $_GET["echostr"]; if ($return) { if ($this->checkSignature()) { return $echoStr; } else { return false; } } else { if ($this->checkSignature()) { die($echoStr); } else { die('no access'); } } } if (!$this->checkSignature($encryptStr)) { if ($return) { return false; } else { die('no access'); } } return true; }
/** * 微信验证,包括post来的xml解密 * @param bool $return 是否返回 */ public function valid($return = false) { $encryptStr = ""; if ($_SERVER['REQUEST_METHOD'] == "POST") { $postStr = file_get_contents("php://input"); $array = (array) simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $this->log($postStr); if (isset($array['Encrypt'])) { $encryptStr = $array['Encrypt']; $this->agentidxml = isset($array['AgentID']) ? $array['AgentID'] : ''; } } else { $encryptStr = isset($_GET["echostr"]) ? $_GET["echostr"] : ''; } if ($encryptStr) { $ret = $this->checkSignature($encryptStr); } if (!isset($ret) || !$ret) { if (!$return) { die('no access'); } else { return false; } } $pc = new Prpcrypt($this->encodingAesKey); $array = $pc->decrypt($encryptStr, $this->appid); if (!isset($array[0]) || $array[0] != 0) { if (!$return) { die('解密失败!'); } else { return false; } } if ($_SERVER['REQUEST_METHOD'] == "POST") { $this->postxml = $array[1]; //$this->log($array[1]); return $this->postxml != ""; } else { $echoStr = $array[1]; if ($return) { return $echoStr; } else { die($echoStr); } } return false; }
/** * 检验消息的真实性,并且获取解密后的明文. * <ol> * <li>利用收到的密文生成安全签名,进行签名验证</li> * <li>若验证通过,则提取xml中的加密消息</li> * <li>对消息进行解密</li> * </ol> * * @param $msgSignature string 签名串,对应URL参数的msg_signature * @param $timestamp string 时间戳 对应URL参数的timestamp * @param $nonce string 随机串,对应URL参数的nonce * @param $postData string 密文,对应POST请求的数据 * @param &$msg string 解密后的原文,当return返回0时有效 * * @return int 成功0,失败返回对应的错误码 */ public function DecryptMsg($sMsgSignature, $sTimeStamp = null, $sNonce, $sPostData, &$data) { if (strlen($this->m_sEncodingAesKey) != 43) { return ErrorCode::$IllegalAesKey; } $pc = new Prpcrypt($this->m_sEncodingAesKey); //提取密文 $xmlparse = new XMLParse(); $array = $xmlparse->extract($sPostData); $ret = $array[0]; if ($ret != 0) { return $ret; } if ($sTimeStamp == null) { $sTimeStamp = time(); } $encrypt = $array[1]; $touser_name = $array[2]; //验证安全签名 $sha1 = new SHA1(); $array = $sha1->getSHA1($this->m_sToken, $sTimeStamp, $sNonce, $encrypt); $ret = $array[0]; if ($ret != 0) { return $ret; } $signature = $array[1]; if ($signature != $sMsgSignature) { return ErrorCode::$ValidateSignatureError; } $result = $pc->decrypt($encrypt, $this->m_sCorpid); if ($result[0] != 0) { return $result[0]; } $sMsg = $result[1]; $data = array(); $xml = simplexml_load_string($sMsg, 'SimpleXMLElement', LIBXML_NOCDATA); $data = api_json_decode(api_json_encode($xml), TRUE); // if($xml){ // foreach ($xml as $key => $value) { // $data[$key] = mb_convert_encoding(strval($value),"GBK","UTF-8");; // } // } return ErrorCode::$OK; }
/** * 检验消息的真实性,并且获取解密后的明文. * <ol> * <li>利用收到的密文生成安全签名,进行签名验证</li> * <li>若验证通过,则提取xml中的加密消息</li> * <li>对消息进行解密</li> * </ol> * * @param $msgSignature string 签名串,对应URL参数的msg_signature * @param $timestamp string 时间戳 对应URL参数的timestamp * @param $nonce string 随机串,对应URL参数的nonce * @param $postData string 密文,对应POST请求的数据 * @param &$msg string 解密后的原文,当return返回0时有效 * * @return int 成功0,失败返回对应的错误码 */ public function decryptMsg($msgSignature, $timestamp = null, $nonce, $postData, &$msg) { if (strlen($this->encodingAesKey) != 43) { return ErrorCode::$IllegalAesKey; } $pc = new Prpcrypt($this->encodingAesKey); //提取密文 $array = Tool::extract_xml_data($postData); $ret = $array[0]; if ($ret != 0) { return $ret; } if ($timestamp == null) { $timestamp = time(); } $encrypt = $array[1]; $touser_name = $array[2]; //验证安全签名 $array = Tool::getSHA1($this->token, $timestamp, $nonce, $encrypt); $ret = $array[0]; if ($ret != 0) { return $ret; } $signature = $array[1]; if ($signature != $msgSignature) { return ErrorCode::$ValidateSignatureError; } $result = $pc->decrypt($encrypt, $this->appId); if ($result[0] != 0) { return $result[0]; } $msg = $result[1]; return ErrorCode::$OK; }
/** * 检验消息的真实性,并且获取解密后的明文. * <ol> * <li>利用收到的密文生成安全签名,进行签名验证</li> * <li>若验证通过,则提取xml中的加密消息</li> * <li>对消息进行解密</li> * </ol> * * @param $msgSignature string 签名串,对应URL参数的msg_signature * @param $timestamp string 时间戳 对应URL参数的timestamp * @param $nonce string 随机串,对应URL参数的nonce * @param $postData string 密文,对应POST请求的数据 * @param &$msg string 解密后的原文,当return返回0时有效 * * @return int 成功0,失败返回对应的错误码 */ public function DecryptMsg($sMsgSignature, $sTimeStamp = null, $sNonce, $sPostData, &$sMsg) { if (strlen($this->m_sEncodingAesKey) != 43) { return ErrorCode::$IllegalAesKey; } $pc = new Prpcrypt($this->m_sEncodingAesKey); //提取密文 $xmlparse = new XMLParse(); $array = $xmlparse->extract($sPostData); $ret = $array[0]; if ($ret != 0) { return $ret; } if ($sTimeStamp == null) { $sTimeStamp = time(); } $encrypt = $array[1]; $touser_name = $array[2]; //验证安全签名 $sha1 = new SHA1(); $array = $sha1->getSHA1($this->m_sToken, $sTimeStamp, $sNonce, $encrypt); $ret = $array[0]; if ($ret != 0) { return $ret; } $signature = $array[1]; if ($signature != $sMsgSignature) { return ErrorCode::$ValidateSignatureError; } $result = $pc->decrypt($encrypt, $this->m_sCorpid); if ($result[0] != 0) { return $result[0]; } $sMsg = $result[1]; return ErrorCode::$OK; }
<?php include_once "request.php"; $action = @get("action"); $source = @post("source"); $aesKey = @post("key"); $no = @post("no"); if (isset($source)) { $pc = new Prpcrypt($aesKey); if ($action == "encrypt") { $result = $pc->encrypt($source, $no); } else { $result = $pc->decrypt($source); // var_dump($result); } $response = array("success" => true, "result" => $result); printf(json_encode($response)); } /** * PKCS7Encoder class * * 提供基于PKCS7算法的加解密接口. */ class PKCS7Encoder { public static $block_size = 32; /** * 对需要加密的明文进行填充补位 * @param $text 需要进行填充补位操作的明文 * @return 补齐明文字符串 */
$signature = $_GET["msg_signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $echostr = $_GET["echostr"]; $pc = new Prpcrypt(YDWX_WEIXIN_ENCODING_AES_KEY); $sha1 = new SHA1(); $array = $sha1->getSHA1(YDWX_WEIXIN_TOKEN, $timestamp, $nonce, $echostr); $ret = $array[0]; if ($ret != 0) { die; } $signature = $array[1]; if ($signature != $signature) { die; } $result = $pc->decrypt($echostr, YDWX_WEIXIN_CROP_ID); if ($result[0] != 0) { die; } echo $result[1]; } else { //其它公众号的验证 $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $echostr = $_GET["echostr"]; $token = YDWX_WEIXIN_TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr, SORT_STRING); $tmpStr = implode($tmpArr); $tmpStr = sha1($tmpStr);