国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 熱點 > 微信 > 正文

使用weixin-java-tools完成微信授權(quán)登錄、微信支付的示例

2024-07-22 01:17:26
字體:
供稿:網(wǎng)友

本文為學習記錄weixin-java-tools實現(xiàn)公眾號微信支付.

碼云地址:點我

    // 授權(quán)登錄用到    <dependency>      <groupId>com.github.binarywang</groupId>      <artifactId>weixin-java-mp</artifactId>      <version>3.1.0</version>    </dependency>
    // 微信支付用到    <dependency>      <groupId>com.github.binarywang</groupId>      <artifactId>weixin-java-pay</artifactId>      <version>3.1.0</version>    </dependency>

授權(quán)登錄官方 api:點我

個人理解的授權(quán)登錄流程:引導用戶點擊喚起授權(quán)登錄的地址,打開頁面后攜帶微信返回的code參數(shù);使用code參數(shù)獲取AccessToken;獲取用戶數(shù)據(jù)。

引導客戶打開授權(quán)登錄地址后,攜帶code跳轉(zhuǎn)到指定頁面在指定頁面調(diào)用方法:

public Result getAccessToken(@RequestParam(name = "code") String code, HttpServletRequest request, HttpServletResponse response) {    if (StringUtils.isBlank(code)) {      return Result.error("code不存在");    }    try {      WxMpOAuth2AccessToken wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code);      String accessToken = wxMpOAuth2AccessToken.getAccessToken();      // 獲取用戶微信賬戶信息      WxMpUser wxMpUser = wxMpService.getUserService().userInfo(wxMpOAuth2AccessToken.getOpenId());      if (StringUtils.isBlank(wxMpUser.getOpenId())) {        return Result.error("用戶數(shù)據(jù)不存在");      }      return Result.success(wxMpUser);    } catch (WxErrorException e) {      e.printStackTrace();      log.info("授權(quán)異常:{}", e);      return Result.error("授權(quán)登錄失敗");    } catch (Exception e) {      e.printStackTrace();      return Result.error("登錄失敗");    }  }

前端保存下用戶信息就完事了。

個人理解的微信支付流程:用戶頁面點擊<微信支付>按鈕 后端調(diào)用 <微信統(tǒng)一下單> 統(tǒng)一下單返回參數(shù) ,前端使用 <統(tǒng)一下單>返回的參數(shù)喚起微信支付。

商戶中需要在api安全中設置很多東西... 就不一一贅述了

微信支付官方api 前端:點我

后端api點我

商戶登錄地址 點我

public Result pay(Long orderNo, HttpServletRequest request) {        //查詢訂單信息    Order order = orderService.findByOrderNo(orderNo);    try {      WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();      //獲取當前用戶      UserInfo userInfo = RequestContextHolderUtil.getUserInfo();      orderRequest.setBody("支付內(nèi)容的說明");      //商戶號      orderRequest.setMchId(mchId);      orderRequest.setAttach("xxx公司");      orderRequest.setOutTradeNo(orderNo.toString());      orderRequest.setTotalFee(BaseWxPayRequest.yuanToFen(order.getPayment().toString()));//元轉(zhuǎn)成分      orderRequest.setOpenid(userInfo.getOpenId());      orderRequest.setSpbillCreateIp(HttpUtils.getIp(request));      //我這里是微信公眾號內(nèi)打開的h5頁面 type使用 JSAPI 根據(jù)業(yè)務場景變更      orderRequest.setTradeType(WxPayConstants.TradeType.JSAPI);      // 支付成功后跳轉(zhuǎn)頁面  這里需要對url進行編碼      orderRequest.setNotifyUrl("http://xxxxxxxxx");      orderRequest.setAppid(appId);            // 調(diào)用sdk提供的統(tǒng)一下單方法 createOrder會返回重新組裝后的對象 建議使用這個       Object unOrder = wxService.createOrder(orderRequest);      // 這個可能是偏向原生一點的統(tǒng)一下單,返回的參數(shù)有很多沒用的 或者null值 建議使用 createOrder下單      // wxService.unifiedOrder(orderRequest);             return Result.success(unOrder);    } catch (Exception e) {      log.error("微信支付失敗!訂單號:{},原因:{}", orderNo, e.getMessage());      e.printStackTrace();      return Result.error("支付失敗,請稍后重試!");    }  }            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 金阳县| 黑山县| 绥化市| 墨玉县| 衡阳县| 那曲县| 抚顺市| 资阳市| 长海县| 乐都县| 永新县| 惠东县| 寿宁县| 女性| 中超| 时尚| 石渠县| 奉节县| 汕头市| 朝阳区| 马鞍山市| 朝阳县| 拉孜县| 丰镇市| 高州市| 洱源县| 屏东县| 泊头市| 汉寿县| 仁寿县| 新晃| 彩票| 宁远县| 余庆县| 辉县市| 大渡口区| 大石桥市| 土默特右旗| 百色市| 武山县| 贺州市|