2015-01-19 10:56:36 Jahnng 阅读数 1140
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27799 人正在学习 去看看 秦子恒

1、微信公众平台开发通讯机制


微信用户发送微信消息给服务号的时候,消息先发送至微信的服务器,然后微信服务器在把消息推送公众号配置好的接口,第三方后台通过接口接收微信推送过来的消息,根据业务逻辑处理之后,在返回给微信服务器,微信服务器在把第三方返回来的数据发送给微信用户

2、微信后台接口配置 在微信后台的开发者中心中,启用服务器配置,如图所示 

然后修改配置



URL是开发者用来接收微信消息和事件的URL(只支持80端口); TOKEN用来验证签名; EncodingAESKey用来加密消息。 配置好了之后,点击提交的时候,必须要在服务器端正确响应微信的消息,通过检验signature对请求进行校验。若确认此次GET请求来自微信服务器,原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

1. 将token、timestamp、nonce三个参数进行<b>字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

下面是php代码:

<?php
    $signature = $_GET["signature"];
    $timestamp = $_GET["timestamp"];
    $nonce = $_GET["nonce"];    
    $token = 'sdfsd';
    $tmpArr = array($token, $timestamp, $nonce);
    sort($tmpArr, SORT_STRING);
    $tmpStr = implode( $tmpArr );
    $tmpStr = sha1( $tmpStr );
    if( $tmpStr == $signature ){
        echo $_GET['echostr'];
    }else{
    eccho 'fail';
    }
?>

结果如下图所示:


2018-09-27 12:29:32 a909422229 阅读数 936
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27799 人正在学习 去看看 秦子恒

一、打开微信公众号管理界面

本人使用的springboot项目地址:https://github.com/binarywang/weixin-java-mp-demo-springboot

使用微信公众号开发可以用该项目,配置一下即可,很简单的配置。

鼠标滑到最底部的《开发–基本配置》 

点击我要成功开发者。

二、 填写相关服务器配置信息:

A.需要设置开发者密码,点就开启,扫码一下即可。

B.需要注意的是,验证token只能支持80端口或者443端口,其他端口不支持。

URL:填写服务器的域名地址

token:自己定义链接,其他无所谓,明文与兼容都可以。

三、打开公众号设置,配置一下你的服务器域名,注意一个月只能修改三次。

点击设置:配置域名,注意需要验证一下,下载文件,创建一个项目,复制到项目中,如果通过域名可以访问到该文件,则就可以通过验证。其他两个也是这个流程。即可全部通过验证。

四、通过之后就可以了。还有更加简单的方式进行测试配置是否可以用。点击开发者工具

点击公众平台测试账号:与上面配置基本相同,只不过不需要配置过多的链接,扫描二维码即可关注测试。

五、最后一定要记得,配置服务器完成后,点击启动。否则没有效果的。测试的时候无所谓。会有启动的延迟,不会立马生效,本人遇到了一次这个问题,一直接收不到消息,后来发现是这个问题,晚上配置完后睡了一觉,早上启动项目就可以接收了。

晕~有问题留言或者联系。

下一篇:对微信公众号接收消息进行回复

2015-10-10 14:40:36 u010592604 阅读数 1275
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27799 人正在学习 去看看 秦子恒

直接一点哈,用的是Java开发的、SpringMvc。自己只是把自己遇到的东西 写下来 ,方便以后查看,大家也可以了解一下。有什么问题可以一起探讨!

如果启用“开发者中心”,则微信公众平台本身的自动回复,自定义菜单则不能用,就必须需要自己去写代码实现功能。

一、配置

这个配置按照微信提示配置就可以了。

二、后台代码

@RequestMapping(value="/api",method=RequestMethod.GET)
	@ResponseBody
	public String initGetAPI(HttpServletRequest request, HttpServletResponse response)
	{
		 // 微信加密签名  
        String signature = request.getParameter("signature");  
        // 时间戳  
        String timestamp = request.getParameter("timestamp");  
        // 随机数  
        String nonce = request.getParameter("nonce");  
        // 随机字符串  
        String echostr = request.getParameter("echostr");
        //正式微信公众号
        String token = "Token";
        try
        {
	        // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败  
	        if (SignUtil.checkSignature(token,signature, timestamp, nonce)) {  
	            return echostr;  
	        }  
        }catch(Exception ex)
        {
        	return "Illegal Call";
        }
		return "ERROR";
	}
	
	@RequestMapping(value="/api",method=RequestMethod.POST)
	public void initPostAPI(HttpServletRequest request, HttpServletResponse response)
	{
         //业务逻辑
         }





注:一般遇到错误按照微信提示是可以解决的 这里不存什么大问题。


三、开发者中心选择性用

因为启用开发者中心的话自动回复、自定义菜单就没法用了。就得全部自己开发,这个工程量还有有一点小大的,所以没有非要用到开发者中心的话就不要去用。微信开发功能稍微多一点的话,估计都得用了。


2017-05-05 14:44:33 zhq_bo 阅读数 263
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27799 人正在学习 去看看 秦子恒

服务器配置(未启用)修改配置 启用

启用并设置服务器配置后,用户发给公众号的消息以及开发者需要的事件
推送,将被微信转发到该URL中

URL(服务器地址) http://www.xxx.com/wx_sample.php
Token(令牌) token
EncodingAESKey(消息加解密密钥) Rooyxxx3g159OijbTrlRwXXXJ8DNGvnhTjvbdanutA
消息加解密方式 兼容模式

<?php
/**
  * wechat php test
  */

//define your token
define("TOKEN", "token");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();

class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];

        //valid signature , option
        if($this->checkSignature()){
            echo $echoStr;
            exit;
        }
    }

    public function responseMsg()
    {
        //get post data, May be due to the different environments
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

        //extract post data
        if (!empty($postStr)){

                $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $fromUsername = $postObj->FromUserName;
                $toUsername = $postObj->ToUserName;
                $keyword = trim($postObj->Content);
                $time = time();
                $textTpl = "<xml>
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>
                            <Content><![CDATA[%s]]></Content>
                            <FuncFlag>0</FuncFlag>
                            </xml>";             
                if(!empty( $keyword ))
                {
                    $msgType = "text";
                    $contentStr = "Welcome to wechat world!";
                    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                    echo $resultStr;
                }else{
                    echo "Input something...";
                }

        }else {
            echo "";
            exit;
        }
    }

    private function checkSignature()
    {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];    

        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );

        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }
}

?>
2018-12-12 22:56:13 G925010178 阅读数 354
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27799 人正在学习 去看看 秦子恒

服务器配置的作用

微信公众平台的服务器配置启用后可以成为开发者,微信会将事件消息发送到开发者填写的url地址中,开发者可以依据自身业务逻辑进行响应,更好的开发管理微信公众平台。例如配置底部菜单,接收事件推送,客服消息等等。

在这里插入图片描述
如果开发者启用了服务器配置,微信公众平台的一些功能会受到影响,例如自动回复和自定义菜单会失效。

实现逻辑

开发者按照微信提示提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,参数详解:
signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp 时间戳
nonce 随机数
echostr 随机字符串

开发着业务逻辑
1)将token、timestamp、nonce三个参数进行字典序排序
2)将三个参数字符串拼接成一个字符串进行sha1加密
3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

代码逻辑

//配置服务器
public function serverMenu(){
     if(!isset($_GET["echostr"])){
         $this->responseMsg();  //接收事件推送
     }else{
         $this->valid();   //配置微信服务器
     }
 }
//微信请求本地
private function valid(){
      $signature = $this->request->param('signature');
      $timestamp = $this->request->param('timestamp');
      $nonce = $this->request->param('nonce');

      $token = '925010178';   //开发者自己填写的token
      $tmpArr = array($token, $timestamp, $nonce);
      sort($tmpArr, SORT_STRING);
      $tmpStr = implode( $tmpArr );
      $tmpStr = sha1( $tmpStr );

      if( $tmpStr == $signature ){
          echo $_GET["echostr"];
      }else{
          return false;
      }
 }

附上连接

微信官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319

Java微信开发入门

阅读数 1119

没有更多推荐了,返回首页