近日,微信公众平台面向开发者推出了微信内网页开发工具包(微信JS-SDK),内含11类接口集。
从此之后,开发者不仅能够在网页上使用微信本身的拍照、选图、语音、位置等基本能力,还可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为用户提供更优质的网页体验。
那么问题来了:如何在Cocos2d-JS游戏中快速接入微信SDK?
接下来我们将用基于Cocos2d-JS的微信游戏《来自喵星的你》来做个说明,教大家如何快速接入刚刚发布的微信SDK。
(微信支付API正在路上,欢迎关注下期连载哦!)
1.申请公众号
因为微信只能使用公众号接入SDK,所以我们必须先注册一个公众号。
2.设置公众号
登录公众平台后,点击左下角的 设置-公众号设置。右侧有一个js接口安全域名的设置,这里可以绑定3个用到的域名,必须填入顶级域名。
然后点击左下角的 开发者中心,右侧会有一个AppID和一个AppSecret。这两个先记录下来,过后会用到。
3.生成token
打开页面 微信公众平台接口调试工具 并且填入刚才的appid和secret,点击检查问题。记录下返回结果里面的“access_token”的值。
4.获取ticket
复制这个链接:https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=填写刚刚获取的access_token&type=jsapi
并在里面的access_token=后面填入刚刚获取的access_token(对的,就是那一串乱码一样的东西),回车!!
然后把“ticket”的值复制出来,并保存起来,这个就是当前appid的ticket了。
5.生成签名
打开 微信 JS 接口签名校验工具 填入相应的数据:
1)jsapi_ticket: 填入上一步获取的ticket
2)noncestr: 这里随机生成一个字符串填进去(VQhYOUJRz6RolHqN)
3)timestamp: 这里填入一个时间戳,去掉毫秒的3位(如:1420870884) - 这里尽量写ticket生成后的一段时间,new Date() - 0可以获取当前的时间戳
4)url: 准备放页面的地址(域名必须在第二部中设置到安全域名内,如:http://www.cocos2d-x.org/wechat.html)
点击生成签名。记录下下面出现的signature这个值。
6.页面引入微信SDK并初始化
在页面中加入:
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
并且执行初始化:

『贰』 如何在Cocos2d-JS游戏中快速接入微信SDK
近日,微信公众平台面向开发者推出了微信内网页开发工具包(微信JS-SDK),内含11类接口集。
从此之后,开发者不仅能够在网页上使用微信本身的拍照、选图、语音、位置等基本能力,还可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为用户提供更优质的网页体验。
那么问题来了:如何在Cocos2d-JS游戏中快速接入微信SDK?
接下来我们将用基于Cocos2d-JS的微信游戏《来自喵星的你》来做个说明,教大家如何快速接入刚刚发布的微信SDK。
(微信支付API正在路上,欢迎关注下期连载哦!)
1.申请公众号
因为微信只能使用公众号接入SDK,所以我们必须先注册一个公众号。
2.设置公众号
登录公众平台后,点击左下角的 设置-公众号设置。右侧有一个js接口安全域名的设置,这里可以绑定3个用到的域名,必须填入顶级域名。
然后点击左下角的 开发者中心,右侧会有一个AppID和一个AppSecret。这两个先记录下来,过后会用到。
3.生成token
打开页面 微信公众平台接口调试工具 并且填入刚才的appid和secret,点击检查问题。记录下返回结果里面的“access_token”的值。
4.获取ticket
复制这个链接:api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=填写刚刚获取的access_token&type=jsapi
并在里面的access_token=后面填入刚刚获取的access_token(对的,就是那一串乱码一样的东西),回车!!
然后把“ticket”的值复制出来,并保存起来,这个就是当前appid的ticket了。
5.生成签名
打开 微信 JS 接口签名校验工具 填入相应的数据:
1)jsapi_ticket: 填入上一步获取的ticket
2)noncestr: 这里随机生成一个字符串填进去(VQhYOUJRz6RolHqN)
3)timestamp: 这里填入一个时间戳,去掉毫秒的3位(如:1420870884) - 这里尽量写ticket生成后的一段时间,new Date() - 0可以获取当前的时间戳
4)url: 准备放页面的地址(域名必须在第二部中设置到安全域名内,如:.cocos2d-x.org/wechat.html)
点击生成签名。记录下下面出现的signature这个值。
6.页面引入微信SDK并初始化
在页面中加入:
<script src="res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
并且执行初始化:
jsApiList填入的是当前需要使用的接口,需要注意的是,如果公众号不具备某些接口的权限,填进去也无法执行。
这时候将页面上传到第五步填入的url地址,并在微信中打开,应该能够看见config:ok的提示。
如果出现了Invalid Url或者Invalid Domain等提示,说明公众号配置里面出现了问题。而出现Invalid signature的话,则是signature生成出现了问题,检查下timestamp以及随机字符串等是否正确。
到这里我们就可以酣畅淋漓的使用微信的SDK啦。
比方说我们判断wifi加载音频,而非wifi情况则不加载任何音频文件:
『叁』 java ssh框架中怎么上传图片
package com.lilian.framework.servlet;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.lilian.business.common.model.CmResource;
import com.lilian.framework.utils.FileLoadUtil;
/**
 * 通用上传组件(可以使用uploadify等上传组件上传资源)
 * @author Ares
 */
public class FileUploadServlet extends HttpServlet {
	private static final long serialVersionUID = -7933946015372885027L;
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doProcess(request, response);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doProcess(request, response);
	}
	public void doProcess(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charset=utf-8");
		// 保存后的文件名
		String bornName = "";			//源文件名
		String fileName = "";			//文件名
		String fileFormat = "";			//文件格式
		short fileType = 1;				//文件类型
		Long fileSize = 0l;				//文件大小
		String hostAddr = "";			//主机地址(主机IP/域名)
		String virtualAddr = "";		//虚拟地址(相对路径)
		String urlPath = "";			//URL地址(访问路径)
		// 通过时间戳散列目录存储
		SimpleDateFormat formatter = new SimpleDateFormat("yyyyMM/ddHH/");
		Date curDate = new Date(System.currentTimeMillis());	// 获取当前时间
		String fileFolder = formatter.format(curDate);
		
		hostAddr = FileLoadUtil.getKeyValueByKeyName("file.upload.hostadd");
		
//		virtualAddr = FileLoadUtil.getKeyValueByKeyName("file.upload.virtualdir.image") + fileFolder;
		String uploadType = request.getParameter("uploadType");
		if(uploadType!=null && !uploadType.equals("")){
			if(uploadType.equals("1")){
				virtualAddr = FileLoadUtil.getKeyValueByKeyName("file.upload.virtualdir.image") + fileFolder;
			}else if(uploadType.equals("2")){
				virtualAddr = FileLoadUtil.getKeyValueByKeyName("file.upload.virtualdir.config") + fileFolder;
			}else{
				response.getWriter().print("文件上传失败,上传类型不存在!");
				return;
			}
		}else{
			response.getWriter().print("文件上传失败,没有上传类型!");
			return;
		}
		
//		urlPath = SystemLocation.getWebrootpath() + "/" + virtualAddr;
		urlPath = hostAddr + virtualAddr;
		
		// 文件存放的目录
//		String savePath = FileUtil.getUploadFilePath();
		String savePath = FileLoadUtil.getKeyValueByKeyName("file.upload.path") + virtualAddr;
		// 这里还可以添加有业务规则的文件目录,比如允许每个用户有自己的上传文件目录
		File tempDirPath = new File(savePath);
		if (!tempDirPath.exists()) {
			tempDirPath.mkdirs();
		}
		// 创建磁盘文件工厂
		DiskFileItemFactory fac = new DiskFileItemFactory();
		// 创建servlet文件上传组件
		ServletFileUpload upload = new ServletFileUpload(fac);
		// 设置charset为utf-8,上传中文文件名不会产生乱码
		upload.setHeaderEncoding("UTF-8");
		
		// 文件列表
		List fileList = null;
		// 解析request从而得到前台传过来的文件
		try {
			fileList = upload.parseRequest(request);
		} catch (FileUploadException ex) {
			ex.printStackTrace();
			return;
		}
		
		// 遍历从前台得到的文件列表
		Iterator<FileItem> it = fileList.iterator();
		List<CmResource> cmResourceList = new ArrayList<CmResource>();
		while (it.hasNext()) {
			FileItem item = (FileItem) it.next();
			if (!item.isFormField()) {
				fileName = item.getName();
				fileSize = item.getSize();
				bornName = fileName.substring(0, fileName.lastIndexOf("."));
				if (fileName == null || fileName.trim().equals("")) {
					continue;
				}
				// 扩展名格式:
				if (fileName.lastIndexOf(".") >= 0) {
					fileFormat = fileName.substring(fileName.lastIndexOf(".")+1);
				}
				File file = null;
				do {
					// 生成文件名:
					fileName = UUID.randomUUID().toString() + "." + fileFormat;
					file = new File(savePath + fileName);
				} while (file.exists());
				
				File saveFile = new File(savePath + fileName);
				try {
					item.write(saveFile);
				} catch (Exception e) {
					e.printStackTrace();
				}
				
				System.out.println("***************************************************************");
				System.out.println("bornName: " + bornName);
				System.out.println("fileName: " + fileName);
				System.out.println("fileFormat: " + fileFormat);
				System.out.println("fileType: " + fileType);
				System.out.println("fileSize: " + fileSize.longValue());
				System.out.println("hostAdd: " + hostAddr);
				System.out.println("virtualAddr: " + virtualAddr);
				System.out.println("urlPath: " + urlPath);
				System.out.println("imageURL: " + hostAddr + virtualAddr + fileName);
				System.out.println("***************************************************************");
				
				CmResource cmResource = new CmResource();
				cmResource.setBornName(bornName);
				cmResource.setFileName(fileName);
				cmResource.setFileFormat(fileFormat);
				cmResource.setFileType(fileType);
				cmResource.setFileSize(fileSize);
				cmResource.setHostAddr(hostAddr);
				cmResource.setVirtualAddr(virtualAddr);
				cmResource.setUrlPath(urlPath);
				cmResourceList.add(cmResource);
			}
		}
		
		// 将文件的 相对路径+源名称+文件大小 返回给response流。
		request.setAttribute("cmResourceList", cmResourceList);
		response.setContentType("text/html; charset=utf-8");
		response.getWriter().print("文件上传成功!");
	}
}
万能通用