近日,微信公眾平檯面向開發者推出了微信內網頁開發工具包(微信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("文件上傳成功!");
}
}
萬能通用