微信javasdk
1. java後端小程序微信登錄怎麼寫
其實還蠻簡單的,可以說一搜一大把,下面說下兩種方式。
自行開發
主要就是通過小程序端直接請求登錄獲取到code(登錄憑證)、如果需要獲取用戶手機號則需要再次授權需要iv和encryptedData,注意這里前基授權兩次,也可以作為一次處理。
(1) 後端接收到小程序端請求的code,進行解密,可以參考微信小程序開發文檔,拿到openId和session_key,這一步如果是已經注冊的用戶可以直接將後台分配的token一起組成對象存儲到redis中,期限7-30天皆可,先從redis判定這個openId是否已經解析過且已存儲為正式用戶,是慧團謹則直接返回系統的登錄憑證完成登錄。如果不是就需要走第二步。
(2)通過iv和encryptedData解析獲取用戶的手機號,完成解析後將用戶信息存儲,並一樣存儲到資料庫和redis中,返回憑證。
2. 使或茄用已經集成好的sdk,使用maven項目直接引入對象的jar即可。
舉個栗子weixin-java-miniapp 可以看下對應的文檔說明,使用已經集成好的方法即可。
2. 我是做Java後台的,現在寫手機介面,app中涉及到了分享到第三方的功能,比如微信朋友圈、微博、qq空間這
這個調用第三方介面,如果是在微信中,那就需要調用微信的jssdk
3. 開發微信小程序需要Java語言嗎
不需要,小程序是用的
微信小程序
的sdk,裡面有布局,事件處理專門的方法。
如果要和
伺服器端
交互的話,可以替換得語言很多,比如php等都可以!
4. 微信sdk是什麼意思
微信開發 工具包。裡面有不同語言 實現 微信對接的 demo 和一些工具
5. 如何使用微信sdk java版
1.首先我們新建一個Java開發包WeiXinSDK
2.包路徑:com.ansitech.weixin.sdk
測試的前提條件:
假如我的公眾賬號微信號為:vzhanqun
我的伺服器地址為:http://www.vzhanqun.com/
下面我們需要新建一個URL的請求地址
我們新建一個Servlet來驗證URL的真實性,具體介面參考
http://mp.weixin.qq.com/wiki/index.php?title=接入指南
3.新建com.ansitech.weixin.sdk.WeixinUrlFilter.java
這里我們主要是獲取微信伺服器法師的驗證信息,具體驗證代碼如下
[java] view plain 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");//隨機字元串
List<String> params = new ArrayList<String>();
params.add(Token);
params.add(timestamp);
params.add(nonce);
//1. 將token、timestamp、nonce三個參數進行字典序排序
Collections.sort(params, new Comparator<String>() {
@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 print?
/*
* 微信公眾平台(JAVA) SDK
*
* Copyright (c) 2014, Ansitech Network Technology Co.,Ltd All rights reserved.
* http://www.ansitech.com/weixin/sdk/
*
* 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 of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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;
/**
* <p>Title: SHA1演算法</p>
*
* @author qsyang<[email protected]>
*/
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 print?
<filter>
<description>微信消息接入介面</description>
<filter-name>WeixinUrlFilter</filter-name>
<filter-class>com.ansitech.weixin.sdk.WeixinUrlFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>WeixinUrlFilter</filter-name>
<url-pattern>/api/vzhanqun</url-pattern>
</filter-mapping>
好了,接入的開發代碼已經完成。
6.下面就把地址URL和密鑰Token填入到微信申請成為開發者模式中吧。
6. java SDK 是什麼
java SDK簡介:
java SDK全稱(Software Development Kit),中文意思是「軟體開發包」,是廠商提供的集成封裝的庫(library),通常比較底層,通用性強。SDK 是開發 java 應用程序所必需的東西,所以其它編程框架和類庫都是建立在它們之上的,比如Math.random()函數,在編程的時候直接拿來用就行了。
7. 求使用java怎樣配置微信JSSDK的使用方法 wx.config
wx.config({
debug: true, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會列印。
appId: '', // 必填,公眾號的唯一標識
timestamp: , // 必填,生成簽名的時間戳
nonceStr: '', // 必填,生成簽名的隨機串
signature: '',// 必填,簽名,見附錄1
jsApiList: [] // 必填,需要使用的JS介面列表,所有JS介面列表見附錄2
});
8. 微信開放SDK是什麼意思 微信開放SDK是啥意思
1、就是開發工具包應該是可以用這個開發微伏世信相關軟體的。
2、微信開放SDK是採用SDK嵌入的方式,為第三方App提供一個與微信進行內容交換的通道,通過SDK的使用,第三方App可以實現分享信息給用戶碼猜的微信好友和用戶的遲廳型微信朋友圈。
9. 微信公眾平台有 java sdk 嗎
微信公眾平台有自己的java sdk的,微信公眾平台也是一個開發平台,他們對第三方開發企業開放介面,讓更多微信公眾平台運營人員使用第三方的工具,如活動推送工具,可以對接【活動盒子】的java sdk,支付工具,客服工具這些的sdk也都可以對接。
10. 怎麼用java調用微信支付介面
java調用微信支付介面方法:
RequestHandler requestHandler = new RequestHandler(super.getRequest(),super.getResponse());
//獲取token //兩小時內有效,兩小時後重新獲取
Token = requestHandler.GetToken();
//更新token 到應用中
requestHandler.getTokenReal();
System.out.println("微信支付獲取token=======================:" +Token);
//requestHandler 初始化
requestHandler.init();
requestHandler.init(appid,appsecret, appkey,partnerkey, key);
// --------------------------------本地系統生成訂單-------------------------------------
// 設置package訂單參數
SortedMap<String, String> packageParams = new TreeMap<String, String>();
packageParams.put("bank_type", "WX"); // 支付類型
packageParams.put("body", "xxxx"); // 商品描述
packageParams.put("fee_type", "1"); // 銀行幣種
packageParams.put("input_charset", "UTF-8"); // 字元集
packageParams.put("notify_url", "http://xxxx.com/xxxx/wxcallback"); // 通知地址 這里的通知地址使用外網地址測試,注意80埠是否打開。
packageParams.put("out_trade_no", no); // 商戶訂單號
packageParams.put("partner", partenerid); // 設置商戶號
packageParams.put("spbill_create_ip", super.getRequest().getRemoteHost()); // 訂單生成的機器IP,指用戶瀏覽器端IP
packageParams.put("total_fee", String.valueOf(rstotal)); // 商品總金額,以分為單位
// 設置支付參數
SortedMap<String, String> signParams = new TreeMap<String, String>();
signParams.put("appid", appid);
signParams.put("noncestr", noncestr);
signParams.put("traceid", PropertiesUtils.getOrderNO());
signParams.put("timestamp", timestamp);
signParams.put("package", packageValue);
signParams.put("appkey", this.appkey);
// 生成支付簽名,要採用URLENCODER的原始值進行SHA1演算法!
String sign ="";
try {
sign = Sha1Util.createSHA1Sign(signParams);
} catch (Exception e) {
e.printStackTrace();
}
// 增加非參與簽名的額外參數
signParams.put("sign_method", "sha1");
signParams.put("app_signature", sign);
// api支付拼包結束------------------------------------
//獲取prepayid
String prepayid = requestHandler.sendPrepay(signParams);
System.out.println("prepayid :" + prepayid);
// --------------------------------生成完成---------------------------------------------
//生成預付快訂單完成,返回給android,ios 掉起微信所需要的參數。
SortedMap<String, String> payParams = new TreeMap<String, String>();
payParams.put("appid", appid);
payParams.put("noncestr", noncestr);
payParams.put("package", "Sign=WXPay");
payParams.put("partnerid", partenerid);
payParams.put("prepayid", prepayid);
payParams.put("appkey", this.appkey);
//這里除1000 是因為參數長度限制。
int time = (int) (System.currentTimeMillis() / 1000);
payParams.put("timestamp",String.valueOf(time));
System.out.println("timestamp:" + time);
//簽名
String paysign ="";
try {
paysign = Sha1Util.createSHA1Sign(payParams);
} catch (Exception e) {
e.printStackTrace();
}
payParams.put("sign", paysign);
//拼json 數據返回給客戶端
BasicDBObject backObject = new BasicDBObject();
backObject.put("appid", appid);
backObject.put("noncestr", payParams.get("noncestr"));
backObject.put("package", "Sign=WXPay");
backObject.put("partnerid", payParams.get("partnerid"));
backObject.put("prepayid", payParams.get("prepayid"));
backObject.put("appkey", this.appkey);
backObject.put("timestamp",payParams.get("timestamp"));
backObject.put("sign",payParams.get("sign"));
String backstr = dataObject.toString();
System.out.println("backstr:" + backstr);
return backstr;
====================到此為止,預付款訂單已生成,並且已返回客戶端====================
//坐等微信伺服器通知,通知的地址就是生成預付款訂單的notify_url
ResponseHandler resHandler = new ResponseHandler(request, response);
resHandler.setKey(partnerkey);
//創建請求對象
//RequestHandler queryReq = new RequestHandler(request, response);
//queryReq.init();
if (resHandler.isTenpaySign() == true) {
//商戶訂單號
String out_trade_no = resHandler.getParameter("out_trade_no");
System.out.println("out_trade_no:" + out_trade_no);
//財付通訂單號
String transaction_id = resHandler.getParameter("transaction_id");
System.out.println("transaction_id:" + transaction_id);
//金額,以分為單位
String total_fee = resHandler.getParameter("total_fee");
//如果有使用折扣券,discount有值,total_fee+discount=原請求的total_fee
String discount = resHandler.getParameter("discount");
//支付結果
String trade_state = resHandler.getParameter("trade_state");
//判斷簽名及結果
if ("0".equals(trade_state)) {
//------------------------------
//即時到賬處理業務開始
//------------------------------
System.out.println("----------------業務邏輯執行-----------------");
//——請根據您的業務邏輯來編寫程序(以上代碼僅作參考)——
System.out.println("----------------業務邏輯執行完畢-----------------");
System.out.println("success"); // 請不要修改或刪除
System.out.println("即時到賬支付成功");
//給財付通系統發送成功信息,財付通系統收到此結果後不再進行後續通知
resHandler.sendToCFT("success");
//給微信伺服器返回success 否則30分鍾通知8次
return "success";
}else{
System.out.println("通知簽名驗證失敗");
resHandler.sendToCFT("fail");
response.setCharacterEncoding("utf-8");
}
}else {
System.out.println("fail -Md5 failed");