资讯专栏INFORMATION COLUMN

php开发微信第三方平台遇到的那些坑 (更新中)

TIGERB / 2959人阅读

摘要:先谈一共有两个坑,一个是接收不要用还有一个就是解密后的需要干掉字符串前面的不说了上代码吧引入腾讯官方处理解密后的字符串如果出错则返回数组再谈很多朋友会报错误,我觉得可能是腾讯服务器对换行符的解析有问题导致的,于是改用了处理

先谈component_verify_ticket

一共有两个坑,一个是php接收xml不要用$_post 还有一个就是解密后的ticket需要干掉字符串前面的"ticket@@@"

不说了 上代码吧

include_once "wx_third/wxBizMsgCrypt.php";//引入腾讯官方example
    function wxservice(){
            $xml_msg=file_get_contents("php://input");
            $msg=array(
                    "timeStamp"  => empty($_GET["timestamp"])     ? ""    : trim($_GET["timestamp"]) ,
                    "nonce"     => empty($_GET["nonce"])     ? ""    : trim($_GET["nonce"]) ,
                    "msg_sign"   => empty($_GET["msg_signature"]) ? ""    : trim($_GET["msg_signature"])
            );
            $wx_settins=array(
                "appId"=>"xxx",
                "token"=>"xxx",
                "encodingAesKey"=>"xxx",
                "secrect"=>"xxx",
                "ticket"=>"xxx"
            );
            $result=component_decode($xml_msg,$msg,$wx_settins);
            }
    function component_decode($xml,$msg,$config){
            $pc = new WXBizMsgCrypt($config["token"], $config["encodingAesKey"], $config["appId"]);
            $xml_tree = new DOMDocument();
            $xml_tree->loadXML($xml);
            $array_e = $xml_tree->getElementsByTagName("Encrypt");
            $encrypt = $array_e->item(0)->nodeValue;
            $format = "";
            $from_xml = sprintf($format, $encrypt);
            $message = "";
            $errCode = $pc->decryptMsg($msg["msg_sign"], $msg["timeStamp"], $msg["nonce"], $from_xml, $message);
            if ($errCode == 0) {
                $xml = new DOMDocument();
                $xml->loadXML($message);
                $array_e = $xml->getElementsByTagName("ComponentVerifyTicket");
                $component_verify_ticket = preg_replace("/ticket@@@/","",$array_e->item(0)->nodeValue) ;//处理解密后的字符串
                return $component_verify_ticket;
            }else{
            //如果出错则返回数组
                return array(
                    "err_msg"=>$errCode
                );
            }

        }
再谈component_access_token

很多朋友stream_context_create会报40002错误,我觉得可能是腾讯服务器对换行符的解析有问题导致的,于是改用了curl处理POST请求

function fresh_access_token($ticket=null){
    $wx_settins=$wx_settins=array(
                "appId"=>"xxx",
                "token"=>"xxx",
                "encodingAesKey"=>"xxx",
                "secrect"=>"xxx",
                "ticket"=>"xxx"
            );
        $post_data = array(
                "component_appid" =>$wx_settins["appId"],
                "component_appsecret" => $wx_settins["secrect"],
                "component_verify_ticket" =>$ticket
        );
        $data=json_decode(request_post("https://api.weixin.qq.com/cgi-bin/component/api_component_token", $post_data),1);
}
function request_post($url,$data){
        $data =json_encode($data);
        $ch = curl_init(); //用curl发送数据给api
        curl_setopt( $ch, CURLOPT_POST, true );
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
        curl_setopt( $ch, CURLOPT_URL, $url );
        curl_setopt( $ch, CURLOPT_POSTFIELDS, $data );
        curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );
        curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, FALSE );
        $response = curl_exec( $ch );
        curl_close( $ch );
        return $response;
    }
pre_auth_code

pre_auth_code和verify_ticket一样,字符串前面有 preauthcode@@@ 需要替换掉

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25993.html

相关文章

  • 使用 vue2.0 发微公众号下前后端分离SPA站点之旅

    摘要:目前正在写一个微信公众号的小项目,记录一下遇到的问题和解决方法主要是前端。前端提交时使用,在后端再取出对应的微信支付看了下文档,以前是需要用唤起支付,而现在则是把微信内置到了微信的浏览器中。 目前正在写一个微信公众号的小项目,记录一下遇到的问题和解决方法(主要是前端)。内容持续更新中~ 主要实现 前后端分离前端为 SPA 单页面使用微信的JSSDK微信支付 技术方案 后端使用 php ...

    afishhhhh 评论0 收藏0
  • 使用 vue2.0 发微公众号下前后端分离SPA站点之旅

    摘要:目前正在写一个微信公众号的小项目,记录一下遇到的问题和解决方法主要是前端。前端提交时使用,在后端再取出对应的微信支付看了下文档,以前是需要用唤起支付,而现在则是把微信内置到了微信的浏览器中。 目前正在写一个微信公众号的小项目,记录一下遇到的问题和解决方法(主要是前端)。内容持续更新中~ 主要实现 前后端分离前端为 SPA 单页面使用微信的JSSDK微信支付 技术方案 后端使用 php ...

    Taonce 评论0 收藏0
  • 使用vue发微公众号下SPA站点之旅

    摘要:原文见我的博客,点击进入使用开发微信公众号下站点的填坑之旅本文为我创业过程中,开发项目的填坑之旅。作为一个技术宅男,我的项目是做一个微信公众号,前后端全部自己搞定,不浪费国家一分钱。 原文见我的博客,点击进入使用vue开发微信公众号下SPA站点的填坑之旅 本文为我创业过程中,开发项目的填坑之旅。作为一个技术宅男,我的项目是做一个微信公众号,前后端全部自己搞定,不浪费国家一分钱^_^。 ...

    yeyan1996 评论0 收藏0
  • 记录一次发微网页分享

    摘要:需求最近在做一个项目需求,分享领好书活动,获取用户的个人信息以及,并诱导用户分享给好友或朋友圈,达到裂变拉新的目的。 需求 最近在做一个项目需求,分享领好书活动,获取用户的个人信息以及unionID,并诱导用户分享给好友或朋友圈,达到裂变拉新的目的。在做的过程中遇到了一些坑的地方,所以回过来总结一下 技术方案 使用微信JS-SDK自定义分享到好友和分享到朋友圈 实现步骤 1、要实现微信...

    宋华 评论0 收藏0

发表评论

0条评论

TIGERB

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<