wechatpay-javasdk使用的簡單介紹

本文目錄一覽:

怎麼使用 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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
XNFM的頭像XNFM
上一篇 2024-10-04 00:24
下一篇 2024-10-04 00:24

相關推薦

  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的「畫筆」在窗口中繪製…

    編程 2025-04-29
  • Python櫻花樹代碼簡單

    本文將對Python櫻花樹代碼進行詳細的闡述和講解,幫助讀者更好地理解該代碼的實現方法。 一、簡介 櫻花樹是一種圖形效果,它的實現方法比較簡單。Python中可以通過turtle這…

    編程 2025-04-28
  • Python大神作品:讓編程變得更加簡單

    Python作為一種高級的解釋性編程語言,一直被廣泛地運用於各個領域,從Web開發、遊戲開發到人工智能,Python都扮演着重要的角色。Python的代碼簡潔明了,易於閱讀和維護,…

    編程 2025-04-28
  • 用Python實現簡單爬蟲程序

    在當今時代,互聯網上的信息量是爆炸式增長的,其中很多信息可以被利用。對於數據分析、數據挖掘或者其他一些需要大量數據的任務,我們可以使用爬蟲技術從各個網站獲取需要的信息。而Pytho…

    編程 2025-04-28
  • 如何製作一個簡單的換裝遊戲

    本文將從以下幾個方面,為大家介紹如何製作一個簡單的換裝遊戲: 1. 遊戲需求和界面設計 2. 使用HTML、CSS和JavaScript開發遊戲 3. 實現遊戲的基本功能:拖拽交互…

    編程 2025-04-27
  • Guava Limiter——限流器的簡單易用

    本文將從多個維度對Guava Limiter進行詳細闡述,介紹其定義、使用方法、工作原理和案例應用等方面,並給出完整的代碼示例,希望能夠幫助讀者更好地了解和使用該庫。 一、定義 G…

    編程 2025-04-27
  • 2的32次方-1:一個看似簡單卻又複雜的數字

    對於計算機領域的人來說,2的32次方-1(也就是十進制下的4294967295)這個數字並不陌生。它經常被用來表示IPv4地址或者無符號32位整數的最大值。但實際上,這個數字卻包含…

    編程 2025-04-27
  • 製作一個簡單的管理系統的成本及實現

    想要製作一個簡單的管理系統,需要進行技術選型、開發、測試等過程,那麼這個過程會花費多少錢呢?我們將從多個方面來闡述製作一個簡單的管理系統的成本及實現。 一、技術選型 當我們開始思考…

    編程 2025-04-27

發表回復

登錄後才能評論