本文目錄一覽:
怎麼使用 Java SDK
1、在你的Java工程中添加該SDK中dist目錄下的jar庫,並添加到你的編譯路徑中。
2、在你的代碼中import相應的包名。
3、非web應用請修改和查閱MainDemo.java,web應用請修改config.jsp,查閱index.jsp, 獲得包括oauth登錄請求及其它功能請求的方法接口。
4、commons包裏面的java類實現了目前騰訊微博開發平台的所有接口,除第一個參數是oauth對象外。
其他都和開發平台的api文檔一致,類名和方法名亦和api一致。
比如獲取主頁時間線的api是:
那麼此SDK的java類是:Statuses_API.java,實現方法是home_timeline(a,b,c,d…)
5、此SDK為半原創,思路和部分方法函數參考了官方(熱心網友sampan)提供的java SDK() 和網上相關的Oauth授權資料
6、javawind-qweibo-api-1.0.jar為本sdk生成的jar。
如果有修改源碼,記得重新生成此jar。
如何使用微信sdk java版
1.首先我們新建一個Java開發包WeiXinSDK
2.包路徑:com.ansitech.weixin.sdk
測試的前提條件:
假如我的公眾賬號微信號為:vzhanqun
我的服務器地址為:
下面我們需要新建一個URL的請求地址
我們新建一個Servlet來驗證URL的真實性,具體接口參考
接入指南
3.新建com.ansitech.weixin.sdk.WeixinUrlFilter.java
這裡我們主要是獲取微信服務器法師的驗證信息,具體驗證代碼如下
[java] view plain copy print?
package com.ansitech.weixin.sdk;
import com.ansitech.weixin.sdk.util.SHA1;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class WeixinUrlFilter implements Filter {
//這個Token是給微信開發者接入時填的
//可以是任意英文字母或數字,長度為3-32字符
private static String Token = “vzhanqun1234567890”;
@Override
public void init(FilterConfig config) throws ServletException {
System.out.println(“WeixinUrlFilter啟動成功!”);
}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
//微信服務器將發送GET請求到填寫的URL上,這裡需要判定是否為GET請求
boolean isGet = request.getMethod().toLowerCase().equals(“get”);
System.out.println(“獲得微信請求:” + request.getMethod() + ” 方式”);
if (isGet) {
//驗證URL真實性
String signature = request.getParameter(“signature”);// 微信加密簽名
String timestamp = request.getParameter(“timestamp”);// 時間戳
String nonce = request.getParameter(“nonce”);// 隨機數
String echostr = request.getParameter(“echostr”);//隨機字符串
ListString params = new ArrayListString();
params.add(Token);
params.add(timestamp);
params.add(nonce);
//1. 將token、timestamp、nonce三個參數進行字典序排序
Collections.sort(params, new ComparatorString() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
//2. 將三個參數字符串拼接成一個字符串進行sha1加密
String temp = SHA1.encode(params.get(0) + params.get(1) + params.get(2));
if (temp.equals(signature)) {
response.getWriter().write(echostr);
}
} else {
//處理接收消息
}
}
@Override
public void destroy() {
}
}
好了,不過這裡有個SHA1算法,我這裡也把SHA1算法的源碼給貼出來吧!
4.新建com.ansitech.weixin.sdk.util.SHA1.java
[java] view plain copy print?
/*
* 微信公眾平台(JAVA) SDK
*
* Copyright (c) 2014, Ansitech Network Technology Co.,Ltd All rights reserved.
*
*
* Licensed under the Apache License, Version 2.0 (the “License”);
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an “AS IS” BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.ansitech.weixin.sdk.util;
import java.security.MessageDigest;
/**
* pTitle: SHA1算法/p
*
* @author qsyangyangqisheng274@163.com
*/
public final class SHA1 {
private static final char[] HEX_DIGITS = {‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’,
‘6’, ‘7’, ‘8’, ‘9’, ‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’};
/**
* Takes the raw bytes from the digest and formats them correct.
*
* @param bytes the raw bytes from the digest.
* @return the formatted bytes.
*/
private static String getFormattedText(byte[] bytes) {
int len = bytes.length;
StringBuilder buf = new StringBuilder(len * 2);
// 把密文轉換成十六進制的字符串形式
for (int j = 0; j len; j++) {
buf.append(HEX_DIGITS[(bytes[j] 4) 0x0f]);
buf.append(HEX_DIGITS[bytes[j] 0x0f]);
}
return buf.toString();
}
public static String encode(String str) {
if (str == null) {
return null;
}
try {
MessageDigest messageDigest = MessageDigest.getInstance(“SHA1”);
messageDigest.update(str.getBytes());
return getFormattedText(messageDigest.digest());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
5.把這個Servlet配置到web.xml中
[html] view plain copy print?
filter
description微信消息接入接口/description
filter-nameWeixinUrlFilter/filter-name
filter-classcom.ansitech.weixin.sdk.WeixinUrlFilter/filter-class
/filter
filter-mapping
filter-nameWeixinUrlFilter/filter-name
url-pattern/api/vzhanqun/url-pattern
/filter-mapping
好了,接入的開發代碼已經完成。
6.下面就把地址URL和密鑰Token填入到微信申請成為開發者模式中吧。
怎麼用java調用微信支付接口
1.調用微信接口授權
授權這裡有兩種方式,一種是snsapi_bases,另一種是snsapi_userinfo,這裡官方文檔介紹的比較清楚,可以參考官網
;t=resource/res_listverify=1id=open1419316505token=lang=zh_CN
appid 登錄微信公眾號-基本配置-開發者ID-APPID
redirect_uri 就是一個回調地址,當你調用完微信的這個鏈接後,他會自動調用你定義的這個地址,返回code參數
注意,redirect_uri 也需要在公眾號裏面配置,在接口權限-網頁帳號里修改。
2.可以在頁面中寫一個調用授權的頁面
%@ page language=”java” contentType=”text/html; charset=UTF-8″ pageEncoding=”UTF-8″%
!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “
%
String path = request.getContextPath();
String basePath = request.getScheme()+”://”+request.getServerName()+”:”+request.getServerPort()+path+”/”;
%
html
head
title用戶管理/title
script type=”text/javascript” src=”js/jquery/jquery-1.11.1.min.js”/script
script type=”text/javascript”
function oauth() {
var url = “%=basePath%getOauth2Url”;
$.ajax({
url: url,
success : function(result){
//var result = eval(‘(‘+result+’)’);
if (result.success){
location.href = result.obj; //
} else {
}
}
});
}
/script
/head
body
p onclick=”oauth()”非用戶認證鑒權/p
/body
/html
/prepre class=”html” name=”code” snippet_file_name=”blog_20160608_3_8825275″ code_snippet_id=”1711669″java中的方法
pre class=”html” name=”code” /**
* 獲取授權地址
* @return
*/
@RequestMapping(value = “/getOauth2Url”,method = RequestMethod.GET)
public void getOauth2Url(Model model, HttpServletResponse response) {
Json j = new Json();
try {
String authorize_url = PayConfig.AUTHORIZE_URL;
String appId = PayConfig.APPID;
String redirect_uri = PayConfig.REDIRECT_URI;
String url = authorize_url + “?appid=” + appId + “redirect_uri=” + urlEncodeUTF8(redirect_uri) + “response_type=codescope=snsapi_basestate=STATE#wechat_redirect”;
System.out.println(url);
j.setSuccess(true);
j.setMsg(“保存成功!”);
j.setObj(url);
write(response, JSON.toJSONString(j));
} catch (Exception e) {
j.setMsg(e.getMessage());
}
}
/**
* 對回調地址進行encode
* @param source
* @return
*/
public static String urlEncodeUTF8(String source){
String result = source;
try {
result = java.net.URLEncoder.encode(source,”utf-8″);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
pre class=”html” name=”code” /**
* 獲取授權地址
* @return
*/
@RequestMapping(value = “/getOauth2Url”,method = RequestMethod.GET)
public void getOauth2Url(Model model, HttpServletResponse response) {
Json j = new Json();
try {
String authorize_url = PayConfig.AUTHORIZE_URL;
String appId = PayConfig.APPID;
String redirect_uri = PayConfig.REDIRECT_URI;
String url = authorize_url + “?appid=” + appId + “redirect_uri=” + urlEncodeUTF8(redirect_uri) + “response_type=codescope=snsapi_basestate=STATE#wechat_redirect”;
System.out.println(url);
j.setSuccess(true);
j.setMsg(“保存成功!”);
j.setObj(url);
write(response, JSON.toJSONString(j));
} catch (Exception e) {
j.setMsg(e.getMessage());
}
}
/**
* 對回調地址進行encode
* @param source
* @return
*/
public static String urlEncodeUTF8(String source){
String result = source;
try {
result = java.net.URLEncoder.encode(source,”utf-8″);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
package com.crm.common;
public class PayConfig {
public static String APPID = “wx91af774aae000dcb”; //APPID
public static String MCHID = “1347742701”; //商戶編號
public static String PAYKEY = “kong6a9829e4b49a0d2347b4162da6b7”; //支付密鑰
public static String APPSECRET = “f8e1ff34070a94332b3b128232acb5abf “; //公眾號-基本配置-APPSECRET密鑰
public static String REDIRECT_URI = “
回調地址
public static String AUTHORIZE_URL = “
微信授權地址
public static String ACCESS_TOKEN_URI = “
public static String SCOPE = “snsapi_base”; //snsapi_base和snsapi_userinfo
public static String GRANT_TYPE = “grant_type”; //獲取openid時用,不用改
}
3.成功後,回到你當時寫的回調地址
pre class=”html” name=”code”/**
* 微信授權後的回調地址的方法
* @param code
* @param response
*/
@RequestMapping(value = “/authorize”,method = RequestMethod.GET)
public void authorize(String code, HttpServletResponse response, String openid) {
code = “test”;
String access_token_uri = PayConfig.ACCESS_TOKEN_URI;
String appid = PayConfig.APPID;
String secret = PayConfig.APPSECRET;
access_token_uri = access_token_uri.replace(“APPID”, appid).replace(“SECRET”, secret).replace(“CODE”, code);
System.out.println(access_token_uri);
if(openid != null){
UniteOrder order = getUniteOrder(openid);
String reqXML = PayImpl.generateXML(order, PayConfig.PAYKEY);
String respXML = PayImpl.requestWechat(ORDER_URL, reqXML);
System.out.println(“respXML=” + respXML);
UniteOrderResult result = (UniteOrderResult) PayImpl.turnObject(UniteOrderResult.class, respXML);
getWechatPay(result);
}
}
原創文章,作者:XNFM,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/140575.html