2014-03-21 13:51:54 iteye_2245 阅读数 112
  • 微信公众平台深度开发v2.0第2季——获取微信服务器IP...

    “微信公众平台深度开发Java版 v2.0”系列课程共有6季,使用JAVA语言,系统讲解微信公众平台订阅号、服务号官方列出的全部功能接口,包括:自定义菜单、个性化菜单(按需定制菜单)、群发消息、客服消息(有限次消息推送)、模板消息接(无限次消息推送)、微信网页开发(微信WEB开发、微信游戏)、微信JSSDK开发、用户管理、获取用户基本信息、网页授权获取用户基本信息(通过WEB得到用户信息)、二维码(临时二维码、永久二维码)、事件推送、接收普通消息、被动回复用户消息,等知识点。 以及,针对微信公众号开发的服务端架构设计方案。课程以微信公众号开发视角,讲解JAVA开发微信公众号所需的框架、第三方工具。 购买套餐还赠送经典微信开发课程——[微信公众号_独立知识点]环境搭建。该课程针对各种复杂的网络环境,讲解如何构建开发环境,已解决“没有服务器”、“没有固定IP”等开发者遇到的窘境。 课程采用独立知识点讲解,一个知识点,一组课程,真正做到“简单、高效、”以短的时间、实现的学习。更多课程信息请访问CSDN。网址:http://edu.csdn.net/lecturer/631 “微信公众平台企业号开发Java版”陆续上线。 详情 qq2326321088

    27773 人正在学习 去看看 翟东平

 

   收录一个判断是否是微信Webview打开:

 

function is_weixin(){
     var ua = navigator.userAgent.toLowerCase();
     // /i忽略大小写
     if(ua.match(/MicroMessenger/i) == "micromessenger"){
           return true;
     }

      return false;
}

 

 

   扩展阅读:

 

   http://blog.wpjam.com/m/is_weixin/#toc-2

 

   http://blog.ammrli.com/?p=1175

 

 

2018-12-21 12:08:49 u010634066 阅读数 4509
  • 微信公众平台深度开发v2.0第2季——获取微信服务器IP...

    “微信公众平台深度开发Java版 v2.0”系列课程共有6季,使用JAVA语言,系统讲解微信公众平台订阅号、服务号官方列出的全部功能接口,包括:自定义菜单、个性化菜单(按需定制菜单)、群发消息、客服消息(有限次消息推送)、模板消息接(无限次消息推送)、微信网页开发(微信WEB开发、微信游戏)、微信JSSDK开发、用户管理、获取用户基本信息、网页授权获取用户基本信息(通过WEB得到用户信息)、二维码(临时二维码、永久二维码)、事件推送、接收普通消息、被动回复用户消息,等知识点。 以及,针对微信公众号开发的服务端架构设计方案。课程以微信公众号开发视角,讲解JAVA开发微信公众号所需的框架、第三方工具。 购买套餐还赠送经典微信开发课程——[微信公众号_独立知识点]环境搭建。该课程针对各种复杂的网络环境,讲解如何构建开发环境,已解决“没有服务器”、“没有固定IP”等开发者遇到的窘境。 课程采用独立知识点讲解,一个知识点,一组课程,真正做到“简单、高效、”以短的时间、实现的学习。更多课程信息请访问CSDN。网址:http://edu.csdn.net/lecturer/631 “微信公众平台企业号开发Java版”陆续上线。 详情 qq2326321088

    27773 人正在学习 去看看 翟东平

好久没有写博客了,这段时间遇到了很多问题都没有记录下来
今天刚好上线了一个小活动,期间遇到一些比较折腾的问题,撑着有时间记录一下


需求

临近圣诞节,运营组想了一个活动来拉新,活动的大概内容是这样的;
用户访问活动首页, 点击 【我想说】 然后调用微信的 JSDK 来录音,录完音之后上传到微信的服务器,然后 前端根据声音生成一张圣诞树形状的声波图,用户点击分享生成一张海报,其他用户扫描二维码可以收听你分享的语音;然后别人参与活动的时候需要先关注公众号;
这个需求很简单吧,逻辑清晰的不行…好 开搞

查找微信开发者文档

微信开发者JSDK文档
微信录音

在这里插入图片描述
在这里插入图片描述


看完这些文档, 很棒!简单! 微信该提供的都提供了

那梳理一下流程应该是这样的


1、调用wx.startRecord();开始录音
2、调用wx.stopRecord();结束录音,可以得到 localId(注意这个并不是录音存放在手机的路径)
3、调用wx.uploadVoice()上传录音,需要传入2拿到的localId; 微信会返回一个 serverId; (这个serverId 就是微信的素材文件的mediaId;通过这个mediaId 可以从微信服务器下载文件的)
4、ok! 上传成功了 分享的时候把这个serverId分享出去!
5、被分享人拿到这个serverId之后调用wx.downloadVoice();这个接口需要4的serverId,然后这个语音素材就下载到了用户手机,并且返回了一个 localId(注意这个并不是录音存放在手机的路径)
6、用户点击[播放语音] 则调用wx.playVoice()来播放语音,需要5返回的localId;

完美! 一个流程下来虽然步骤多了一点,但是并不是不可行啊,既然可行那就撸起袖子干吧!

但是仔细一看 就发现有很多问题了

方案不足地方


1、
上传的语音素材是 临时素材
通过这种方式上传的语音 属于 【临时素材】,只有3天的有效期!
那么就直接将上面想到的方案给否定掉了,因为你分享出去之后过了3天别人就听不到了!

2、上面的方案有个弊端就是 ,用户收听别人的语音都需要下载,每次都要下载是一件让用户很烦的一件事情;

3、通过微信 【下载临时素材】接口下载语音素材的格式是 amr ; 如果通过微信 的wx.playVoice()播放可能没什么问题,但是这个方案,但是这个方案已经不行了,因为你不能通过wx.downloadVoice()下载语音了(3天有效期一过就不行);

提出新的方案


既然上面的方案不行,不足也很清楚, 那么我们换种实现
主要思路:将文件下载到我们自己的服务器上,将amr格式转码成mp3等等 <audio 能够播放的格式, 然后上传到阿里云OSS存储,开放外部访问,将OSS链接分享出去,直接播放这个链接就行了

详细步骤:
1、调用wx.startRecord();开始录音
2、调用wx.stopRecord();结束录音,可以得到 localId(注意这个并不是录音存放在手机的路径)
3、调用wx.uploadVoice()上传录音,需要传入2拿到的localId; 微信会返回一个 serverId; (这个serverId 就是微信的素材文件的mediaId;通过这个mediaId 可以从微信服务器下载文件的)
(前面3个步骤不变 )
4、前端上传完了之后,调用我的 【下载临时素材到我们自己服务器并且转码成MP3并且上传到阿里云OSS并且返回访问链接】的接口
在这里插入图片描述
需要3获取到的serverId(就是这里的media_id)作为参数;

5、前端拿到了4中的 语音链接 然后分享出去带上这个链接(链接太长可以自己做个对应)
6、被分享着点击播放 直接使用 元素 <audio 来播放这个链接

7、PS:千万不要在 微信开发者工具中 调试[上传语音]的接口;它不支持的!

好 ! 流程这样就没有错了, 但是正在做的时候猜的坑也不少
最主要的就是 4 中 【下载临时素材到我们自己服务器并且转码成MP3并且上传到阿里云OSS并且返回访问链接】

这个接口踩得坑真的不少,最主要的就是转码;网上文章一艘没有几篇有价值的东西 ;
主要就是 调用 jave 这个jar包去转码, 其实最终这个jave 调用了一个叫做 ffmpeg 转码程序来转码的;然后这个程序不同环境还不一样的
我的是Mac 然后服务器又需要Linux版本的;
啰嗦我就不啰嗦了 , 推荐一个解决方案 ,我就是用的这种

Amr转Mp3

这里我提供一下 Mac版的 ffmpeg下载 ffmpeg-mac
特别注意 下载下来的文件是 ffmpeg-mac
后缀 -mac是必须的,因为这个作者是按照这个路径找的


public class changToMp3 {
    public static void main(String[] args) throws Exception {
        String path1 = "/Users/XXX/Desktop/voice/1111.amr";
        String path2 = "/Users/XXX/Desktop/voice/1111.mp3";
        System.setProperty("ffmpeg.home", "/Users/XXX/Desktop/voice/");
        it.sauronsoftware.jave.AudioUtils.amrToMp3(path1, path2);
    }
}

再上传一个Linux版本的提供下载:ffmpeg for linux

如果还有windows版本的 或者上面我发的不支持的;可以去官网自己下载 地址:FFMPEG下载
在这里插入图片描述

下载完解压之后 找到对应程序 放到某个路径 然后 代码设置的路径跟程序路径一直即可!

贴一下关键代码:

    @Override
    public RpcResult<PutResult> amr2mp3Upload2OSS(String gzhAppid, String mediaId,String ossDirKey) {
        RpcResult result = new RpcResult();
        PutResult p = new PutResult();
        String filepath ;String name ;
        try {
            //下载临时文件到 服务器本地
            File file = WxMpConfiguration.getMpServices().get(gzhAppid).getMaterialService().mediaDownload(mediaId);
            if(file == null){
                result.setFail("-1", "操作失败,mediaId 不存在或已过期");
                return result;
            }
            filepath = file.getPath();
            name = file.getName();
            name = name.replace(".amr",".mp3");
        } catch (WxErrorException e) {
            result.setFail(e.getError().getErrorCode()+"", e.getError().getErrorMsg());
            return result;
        }
        //设置 使用转码软件的  程序地址 (要在对应的地址有这个执行脚本)
        System.setProperty("ffmpeg.home", ffmpeg);
        String targetPath = mp3_path+name;
        //转码之后存到本地服务器
        it.sauronsoftware.jave.AudioUtils.amrToMp3(filepath, targetPath);
        PutResult putResult = mossClient.putObject(ossDirKey+ UUID.randomUUID(),new File(targetPath));
        BeanUtils.copyProperties(putResult,p);
        result.setResult(p);
        result.setSuccess();
        return result;

    }

PS: 在调用 wx.uploadVoice() 的接口 千万不要在 微信开发者工具中测试,它不支持,每次返回的都是一样的数,这个要在手机端测试

转码程序一定要接到放到目标服务器上,并且有可以执行的权限(X的权限)

微信开发者配置记得配置JS安全域名不然不能够调用接口

给微信开发者推荐一个开源项目
推荐:班纳睿 / weixin-java-tools

真的强,基于这个开发特别方便! 强推!

在这里插入图片描述

2020-01-05 12:38:53 i042416 阅读数 74
  • 微信公众平台深度开发v2.0第2季——获取微信服务器IP...

    “微信公众平台深度开发Java版 v2.0”系列课程共有6季,使用JAVA语言,系统讲解微信公众平台订阅号、服务号官方列出的全部功能接口,包括:自定义菜单、个性化菜单(按需定制菜单)、群发消息、客服消息(有限次消息推送)、模板消息接(无限次消息推送)、微信网页开发(微信WEB开发、微信游戏)、微信JSSDK开发、用户管理、获取用户基本信息、网页授权获取用户基本信息(通过WEB得到用户信息)、二维码(临时二维码、永久二维码)、事件推送、接收普通消息、被动回复用户消息,等知识点。 以及,针对微信公众号开发的服务端架构设计方案。课程以微信公众号开发视角,讲解JAVA开发微信公众号所需的框架、第三方工具。 购买套餐还赠送经典微信开发课程——[微信公众号_独立知识点]环境搭建。该课程针对各种复杂的网络环境,讲解如何构建开发环境,已解决“没有服务器”、“没有固定IP”等开发者遇到的窘境。 课程采用独立知识点讲解,一个知识点,一组课程,真正做到“简单、高效、”以短的时间、实现的学习。更多课程信息请访问CSDN。网址:http://edu.csdn.net/lecturer/631 “微信公众平台企业号开发Java版”陆续上线。 详情 qq2326321088

    27773 人正在学习 去看看 翟东平

假设我用vue开发了一个web应用,需要在手机微信里访问并调试, 可以按照本文介绍的步骤,使用微信开发者工具来调试.

假设我的web应用的访问入口是如下公众号菜单的"预约"按钮:

那么为了能够在微信开发者工具里调试,需要首先进入该公众号的后台,在web开发者工具里,将我本人的微信号添加进去:

点击"绑定开发者账号":

输入待绑定的微信账号:

点击绑定,该微信号会收到一条消息,询问是否绑定:

点击同意操作完成绑定.

接下来,把要调试的web应用的url放到微信开发者工具地址栏里,回车之后,微信开发者工具就会弹出一个询问窗口,点击Allow之后,就可以在微信开发者工具提供的类似Chrome开发者工具调试器一样的界面里进行单步调试了.

这个粘贴到地址栏的url很有讲究。

https://open.weixin.qq.com/connect/oauth2/authorize?appid=yyyy&redirect_uri=https%3a%2f%2fwww.xxx.com%2fsmart&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect
其中appid=后面的值,是从微信公众号控制台里拷贝出来的appid:

redirect_uri, 即为我们开发的web应用,部署到服务器之后生成的url,需要经过url encode处理:https://www.xxx.com/smart

这个url准备好之后,将其粘贴到微信开发者工具地址栏里,回车,即可看到一个对话窗口,要求获得我们公开信息的许可:

点击Allow之后,就可以像使用Chrome开发者工具的调试器一样,在微信开发者工具里进行单步调试了:

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

2018-02-27 14:55:55 MZQ1993 阅读数 1223
  • 微信公众平台深度开发v2.0第2季——获取微信服务器IP...

    “微信公众平台深度开发Java版 v2.0”系列课程共有6季,使用JAVA语言,系统讲解微信公众平台订阅号、服务号官方列出的全部功能接口,包括:自定义菜单、个性化菜单(按需定制菜单)、群发消息、客服消息(有限次消息推送)、模板消息接(无限次消息推送)、微信网页开发(微信WEB开发、微信游戏)、微信JSSDK开发、用户管理、获取用户基本信息、网页授权获取用户基本信息(通过WEB得到用户信息)、二维码(临时二维码、永久二维码)、事件推送、接收普通消息、被动回复用户消息,等知识点。 以及,针对微信公众号开发的服务端架构设计方案。课程以微信公众号开发视角,讲解JAVA开发微信公众号所需的框架、第三方工具。 购买套餐还赠送经典微信开发课程——[微信公众号_独立知识点]环境搭建。该课程针对各种复杂的网络环境,讲解如何构建开发环境,已解决“没有服务器”、“没有固定IP”等开发者遇到的窘境。 课程采用独立知识点讲解,一个知识点,一组课程,真正做到“简单、高效、”以短的时间、实现的学习。更多课程信息请访问CSDN。网址:http://edu.csdn.net/lecturer/631 “微信公众平台企业号开发Java版”陆续上线。 详情 qq2326321088

    27773 人正在学习 去看看 翟东平

问题:点击一个菜单,跳转到自定义页面,电脑版微信可以访问到该页面,手机版微信访问一片空白,什么都没有。

解决:本人给该菜单设置url的时候,填的是localhost,把localhost改成相应的外网地址即可(微信后台配置的服务器路径地址)。

2016-11-14 12:02:59 dongba335 阅读数 3347
  • 微信公众平台深度开发v2.0第2季——获取微信服务器IP...

    “微信公众平台深度开发Java版 v2.0”系列课程共有6季,使用JAVA语言,系统讲解微信公众平台订阅号、服务号官方列出的全部功能接口,包括:自定义菜单、个性化菜单(按需定制菜单)、群发消息、客服消息(有限次消息推送)、模板消息接(无限次消息推送)、微信网页开发(微信WEB开发、微信游戏)、微信JSSDK开发、用户管理、获取用户基本信息、网页授权获取用户基本信息(通过WEB得到用户信息)、二维码(临时二维码、永久二维码)、事件推送、接收普通消息、被动回复用户消息,等知识点。 以及,针对微信公众号开发的服务端架构设计方案。课程以微信公众号开发视角,讲解JAVA开发微信公众号所需的框架、第三方工具。 购买套餐还赠送经典微信开发课程——[微信公众号_独立知识点]环境搭建。该课程针对各种复杂的网络环境,讲解如何构建开发环境,已解决“没有服务器”、“没有固定IP”等开发者遇到的窘境。 课程采用独立知识点讲解,一个知识点,一组课程,真正做到“简单、高效、”以短的时间、实现的学习。更多课程信息请访问CSDN。网址:http://edu.csdn.net/lecturer/631 “微信公众平台企业号开发Java版”陆续上线。 详情 qq2326321088

    27773 人正在学习 去看看 翟东平

文正教务系统微信开发

个人开发微信,初出茅庐,以下是自己的一点货,希望对想开发微信的人有一点帮助,因为微信开发测试比较困难,所以将本机作为服务器是一个不错的开发选择,用ngrok进行内网穿透就可以进行本地开发微信,因为ngrok需要翻墙,所以选择了国内的sunny-ngrok软件实现内网穿透。好了,废话不多说,下面是微信开发的具体教程与方法。

环境搭建

开发语言: php
开发综合环境: wampserv
服务器: 本机(Intel(R) Core(TM) i3-2370M CPU @ 2.4GHz windows 7 操作系统 )
Sunny-ngrok(实现内网穿透,服务器在HongKong)
数据库: MySQL 数据库(由老师提供的文正教务系统数据库(私密信息修改))
微信公众平台: 微信公众号 wzjwxt

主要环境搭建步骤
1. -微信公众号申请
2. wampserver x64下载并安装,MySQL数据库下载并安装,下载 Navicat for MySQL 方便管理MySQL
3. sunny-ngrok 实现内网穿透
登录网址https://www.ngrok.cc/进行注册并且点击隧道管理,申请隧道,并且支付10元/月的服务器费用(免费的带宽太低无法使用,太坑了,有钱好办事嘛),下载sunny-ngrok到自己的电脑,然后进行测试。

具体开发步骤
首先实现token验证
<public function valid()
{
$echoStr = $_GET["echostr"];
$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){
echo $echoStr;
exit;
}
}

然后进行服务响应等一系列操作,具体的方法可观看慕课网微信公众开发教程,和方倍教程

希望此次博客能给微信公众平台开发的友人们一点帮助,么么哒!

微信开发

阅读数 518

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