微信,支付寶支付,微信公衆号小程式授權等
-
- 前言
- 微信支付
- 微信授權
- 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>