天天看點

微信,支付寶支付,微信公衆号小程式授權等

微信,支付寶支付,微信公衆号小程式授權等

    • 前言
    • 微信支付
    • 微信授權
    • maven依賴(更新)

前言

最近在公司也做了很多移動端項目,如今微信公衆号,小程式又特别火爆,免不了要接觸支付,授權這類的業務需求,是以在工作之餘對支付寶支付,微信支付與授權重新梳理,獨立出來分享到maven中央倉庫,友善大家簡單使用!

微信支付

支付寶相關API就比較簡單了,我這邊對應支付寶官方文檔對appid,公鑰秘鑰做了簡單封裝,基本步驟和微信支付一樣,就不貼代碼了。

微信支付這邊,當時封裝為了友善就按心情起了别名,這邊稍微解釋一下,後面的其他API調用就大緻清晰明了了,每個平台的參數初始化配置都需要設定相應商戶号和商戶秘鑰,因為可能有的客戶可能開放平台綁定一個商戶号,公衆平台綁定一個商戶号,所有這邊就要一一區分開來。

字首wxOp–open platform 開放平台

字首wxPp–public platform 公衆平台

字首wxSp–small program 小程式

整個調用過程也比較簡單,java背景就3步操作:

1.初始化參數

2.生成統一下單預支付參數

public static void main(String[] args) {
        WxConfig wxConfig=new WxConfig();
        wxConfig.setNotifyUrl("微信異步通知回調位址");
        //開發平台
        wxConfig.setWxOpAppId("開放平台APPID");
        wxConfig.setWxOpSecrect("開放平台秘鑰");
        wxConfig.setWxOpMchId("商戶号");
        wxConfig.setWxOpMchKey("商戶秘鑰");
        wxConfig.setWxOpCertPath("證書位址路徑【退款,企業轉賬功能需要該參數】");
        //公衆平台
        wxConfig.setWxPpAppId("公衆平台APPID");
        wxConfig.setWxPpSecrect("公衆平台秘鑰");
        wxConfig.setWxPpMchId("商戶号");
        wxConfig.setWxPpMchKey("商戶秘鑰");
        wxConfig.setWxPpCertPath("證書位址路徑【退款,企業轉賬功能需要該參數】");
        //小程式
        wxConfig.setWxSpAppId("小程式APPID");
        wxConfig.setWxSpSecrect("小程式");
        wxConfig.setWxSpMchId("商戶号");
        wxConfig.setWxSpMchKey("商戶秘鑰");
        wxConfig.setWxSpCertPath("證書位址路徑【退款,企業轉賬功能需要該參數】");
        WxPayService wxPayService=new WxPayServiceImpl();
        wxPayService.setWxConfigStorage(wxConfig);
		//網頁支付NATIVE模式傳回支付二維碼連結,用于生成二維碼進行掃碼支付
        System.out.println(wxPayService.wxWebPay("支付單号",0.01));		
		System.out.println(wxPayService.wxAppPay("支付單号",0.01));
        System.out.println(wxPayService.wxPpPay("支付單号",0.01,"公衆号擷取的openId"));
        System.out.println(wxPayService.wxSpPay("支付單号",0.01,"小程式擷取的openId"));
    }
           
3.接收微信異步通知結果
@PostMapping(value = "/wechat/notify")
    public String wechatNotify(HttpServletRequest request) {
    String result ="";
        try {
            Map<String, String> map = XMLUtil.wxPayNotify(request);
            if ("SUCCESS".equals(map.get("return_code")) && "SUCCESS".equals(map.get("result_code"))) {
   				//簽名校驗-取綁定對應平台的商戶秘鑰
                if (IdentityUtil.inspectionSign(map, wxConfig.getWxSpMchKey())) {
                      //調起支付所傳入的支付流水号
                      String outTradeNo = map.get("out_trade_no");
                      //業務邏輯處理--校驗簽名,支付單号,還可以校驗金額這裡自由發揮
                      result = XMLUtil.setWechatXml("SUCCESS", "OK");
                } else {
                    return XMLUtil.setWechatXml("FAIL", "驗簽失敗");
                }  
            }
        } catch (Exception e) {
            e.printStackTrace();
            log.info("---------------------------回調通知異常!!!-------------------------------");
            result = XMLUtil.setWechatXml("FAIL", "回調通知異常");
        } finally {
            return result;
        }
    }

           

微信授權

授權這邊主要調用WxAuthService接口

也是對應别名區分不同平台 參數的初始化和微信支付一樣,隻需要傳入對應平台的appid和secrect,不需要商戶号的配置資訊–開發業務流程需要對照微信開發文檔業務流程,這邊我就不一一闡述了。

微信公衆平台技術文檔

public interface WxAuthService extends WxService {

     /**
     * 公衆号授權擷取code
     *
     * @param redirectUrl 授權後重定向連結
     * @param scope       應用作用域
     * @param state       重定向後會帶上的參數(最多128位元組)
     * @return 微信用戶端連結
     */
    String wxPpOAuth2CodeAuthorizationUrl(String redirectUrl, String scope, String state);

    /**
     * 微信開放平台擷取code
     *
     * @param redirectUrl 授權後重定向連結
     * @param state       重定向後會帶上的參數(最多128位元組)
     * @return 微信網頁連結
     */
    String wxOpOAuth2CodeAuthorizationUrl(String redirectUrl, String state);

    /**
     * 微信開放平台擷取AccessToken
     *
     * @param code 微信臨時票據
     * @return 傳回微信授權的access_token, openid等
     * @throws Exception
     */
    WxOAuth2Info wxOpOAuth2AccessToken(String code) throws Exception;

    /**
     * 微信公衆平台擷取AccessToken
     *
     * @param code 微信臨時票據
     * @return 傳回微信授權的access_token, openid等, 當且網站應用已擷取該使用者的userinfo授權時, 會傳回unionid
     * @throws Exception
     */
    WxOAuth2Info wxPpOAuth2AccessToken(String code) throws Exception;

    /**
     * 微信小程式擷取AccessToken
     *
     * @param code 微信臨時票據
     * @return
     * @throws Exception
     */
    WxOAuth2Info wxSpOAuth2AccessToken(String code) throws Exception;

    /**
     * 微信擷取使用者資訊
     *
     * @param accessToken 接口調用憑證
     * @param openId      授權使用者唯一辨別
     * @return
     * @throws Exception
     */
    WxUserInfo wxOAuth2getUserInfo(String accessToken, String openId) throws Exception;

    /**
     * 微信公衆号掃一掃擷取AccessToken
     *
     * @return 接口調用憑證
     * @throws Exception
     */
    WxOAuth2Info wxPpOAuth2ScanAccessToken() throws Exception;

    /**
     * 微信公衆号生成掃一掃的簽名
     *
     * @param url         調起掃一掃的連結
     * @param accessToken 接口調用憑證
     * @return 傳回掃一掃簽名
     * @throws Exception
     */
    WxScanSign wxPpOAuth2ScanSign(String url, String accessToken) throws Exception;

    /**
     * 擷取使用者基本資訊(包括UnionID機制)
     *
     * @param accessToken 接口調用憑證
     * @param openId      授權使用者唯一辨別
     * @return
     * @throws Exception
     */
    WxUnionUserInfo wxPpGetUnionUserInfo(String accessToken, String openId) throws Exception;
}


           

maven依賴(更新)

因為寫的趕,大部分接口注釋暫時沒有補上,後續會持續更新。(覺得好用可以點個贊喲)

<dependency>
            <groupId>com.github.liujiebang</groupId>
            <artifactId>pay</artifactId>
            <version>1.5.7</version>
        </dependency>