SpringBoot2.0ウィジェット支払い機能weixin-java-payを実現
17051 ワード
SpringBoot2.0ウィジェット支払い機能weixin-java-payを実現
WxJava-微信開発Java SDK(開発キット);微信支払い、オープンプラットフォーム、公衆番号、企業微信/企業番号、小プログラムなどの微信機能を含むバックエンド開発をサポートする.
ステップ1:SDKの使い方
Maven方式導入:
各モジュールのartifactId:マイクロメッセージウィジェット: 微信支払: 微信オープンプラットフォーム: 公衆番号(購読番号とサービス番号を含む): 企業番号/企業微信: ステップ2:微信関連情報の構成
application.yml
ステップ3:統合受注インタフェースビジネスの作成
統一注文支払いインタフェースを呼び出す:wxServices.createOrder(orderRequest)
ステップ4:ウィジェット側で操作可能
ウィジェット側は主にウィジェットインタフェースを呼び出してユーザー情報を取得し、主にcodeであり、それからバックグラウンドに伝え、バックグラウンドはcodeを通じてopenid取得方式を取得する.
その後,コールバックアドレスから返されたデータに基づいて,ウィジェットはデータを解析的にカプセル化して支払いインタフェースを呼び出して支払いを行うことができる.
ここで主に述べるバックエンドの使い方
==================================================================
ブログアドレス:https://www.codepeople.cn
==================================================================
転載先:https://www.cnblogs.com/lr393993507/p/10718136.html
WxJava-微信開発Java SDK(開発キット);微信支払い、オープンプラットフォーム、公衆番号、企業微信/企業番号、小プログラムなどの微信機能を含むバックエンド開発をサポートする.
ステップ1:SDKの使い方
Maven方式導入:
<dependency>
<groupId>com.github.binarywanggroupId>
<artifactId>( )artifactId>
<version>3.3.0version>
dependency>
各モジュールのartifactId:
weixin-java-miniapp
weixin-java-pay
weixin-java-open
weixin-java-mp
weixin-java-cp
application.yml
#
wx:
miniapp:
configs:
- appid: # appid
secret: # secret
token: # token
aesKey: # EncodingAESKey
msgDataFormat: JSON
pay:
appId: # appid
mchId: #
mchKey: #
subAppId: # ID
subMchId: #
keyPath: classpath:cert/apiclient_cert.p12 # p12 , , ( classpath: )
notifyUrl: https://www.xxx.com/wx/notify #
ステップ3:統合受注インタフェースビジネスの作成
統一注文支払いインタフェースを呼び出す:wxServices.createOrder(orderRequest)
/**
* @Title: WxUserVedioController.java
* @Package io.renren.modules.wx.controller
* @Description:
* Copyright: Copyright (c) 2019 www.codepeople.cn Inc. All rights reserved.
* Website: www.codepeople.cn
* : ,
* @Author
* @DateTime 2019 4 6 11:54:08
* @version V1.0
*/
package io.renren.modules.wx.controller;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse;
import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
import com.github.binarywang.wxpay.bean.result.BaseWxPayResult;
import com.github.binarywang.wxpay.constant.WxPayConstants;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.github.binarywang.wxpay.service.WxPayService;
import io.renren.common.utils.DateUtils;
import io.renren.common.utils.IPUtils;
import io.renren.common.utils.PageUtils;
import io.renren.common.utils.R;
import io.renren.modules.soft.entity.AuthorizationEntity;
import io.renren.modules.soft.entity.HospitalEntity;
import io.renren.modules.soft.entity.OrderEntity;
import io.renren.modules.soft.entity.PayFlowEntity;
import io.renren.modules.soft.entity.PurchaseRecordEntity;
import io.renren.modules.soft.entity.RefundRecordEntity;
import io.renren.modules.soft.service.AuthorizationService;
import io.renren.modules.soft.service.BedBaseService;
import io.renren.modules.soft.service.DeviceService;
import io.renren.modules.soft.service.HospitalService;
import io.renren.modules.soft.service.OrderService;
import io.renren.modules.soft.service.PayFlowService;
import io.renren.modules.soft.service.PurchaseRecordService;
import io.renren.modules.soft.service.RefundRecordService;
import io.renren.modules.soft.service.StatementService;
import io.renren.modules.soft.service.ThirdUserService;
import io.renren.modules.soft.service.UserAuthorizationService;
import io.renren.modules.soft.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
/**
* @ClassName: WxUserVedioController
* @Description:
* @Author
* @DateTime 2019 4 6 11:54:08
*/
@Api(tags = " ")
@RestController
@RequestMapping("/wx")
@Slf4j
public class WxxxxUserVedioController {
@Value("${wx.notifyUrl}")
private String notifyUrl;
@Autowired
private WxPayService wxService;
@Autowired
private HospitalService hospitalService;
@Autowired
private PayFlowService payFlowService;
@Autowired
private OrderService orderService;
/**
* @Title: createOrder
* @Description:
* @Author
* @DateTime 2019 4 6 12:12:11
* @param
* @return
*/
@PostMapping("/user/createOrder")
public R createOrder(HttpServletRequest request,@RequestBody Map map) throws WxPayException{
String bed_id = map.get("bedId");
log.info(" bed_id:{}", bed_id);
if (StringUtils.isAnyBlank(bed_id)) {
return R.error(" null");
}
Long bedId = Long.valueOf(bed_id).longValue();
// bedId
HospitalEntity hospitalEntity = hospitalService.hospitalByBedId(bed_id.trim());
BigDecimal money = hospitalEntity.getCharge();
HttpSession session = request.getSession();
String mobile = (String) session.getAttribute("userphone");
String userId = (String) session.getAttribute("userId");
// TODO
// TODO
// TODO
WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
orderRequest.setSignType(WxPayConstants.SignType.MD5);
orderRequest.setBody(" ");
orderRequest.setOutTradeNo(order_No); // order_No
orderRequest.setTradeType(WxPayConstants.TradeType.JSAPI);
// orderRequest.setTotalFee(BaseWxPayRequest.yuanToFen(yuanMoney));//
orderRequest.setTotalFee(money.intValue());//
orderRequest.setOpenid(userEntity.getOpenid()); // openId
orderRequest.setSpbillCreateIp(IPUtils.getIpAddr(request));
Date now = new Date();
Date afterDate = DateUtils.addDateMinutes(now, 10);//10
orderRequest.setTimeStart(DateUtils.format(now, "yyyyMMddHHmmss"));
orderRequest.setTimeExpire(DateUtils.format(afterDate, "yyyyMMddHHmmss"));
orderRequest.setNotifyUrl(notifyUrl);
Object order = wxService.createOrder(orderRequest);
return R.ok().put("order", order);
}
@ApiOperation(" ")
@ResponseBody
@PostMapping("/notify")
public String payNotify(HttpServletRequest request, HttpServletResponse response) {
try {
/*HttpSession session = request.getSession();
String mobile = (String) session.getAttribute("userphone");
if (StringUtils.isBlank(mobile)) {
return R.error(401, "session !");
}
// , ID
AuthorizationEntity user = authorizationService.getOneByMobile(mobile);*/
String xmlResult = IOUtils.toString(request.getInputStream(), request.getCharacterEncoding());
WxPayOrderNotifyResult notifyResult = wxService.parseOrderNotifyResult(xmlResult);
// outTradeNo
String orderId = notifyResult.getOutTradeNo();
String tradeNo = notifyResult.getTransactionId();
String totalFee = BaseWxPayResult.fenToYuan(notifyResult.getTotalFee());
if("SUCCESS".equals(notifyResult.getResultCode())) {
PayFlowEntity entity = new PayFlowEntity();
entity.setPayFee(BigDecimal.valueOf(notifyResult.getCashFee()));
entity.setPayFlowNo(orderId);
entity.setPayUserInfo(notifyResult.getOpenid());
entity.setThreeInNo(tradeNo);
payFlowService.save(entity);
OrderEntity order_entity = new OrderEntity();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
order_entity.setCreateTime(new Date());
//
UpdateWrapper updateWrapper = new UpdateWrapper<>();
updateWrapper.set("order_status", "1");
updateWrapper.set("pay_id", notifyResult.getOpenid());
updateWrapper.set("pay_status", "1");
updateWrapper.set("pay_end_time", sdf.parse(notifyResult.getTimeEnd()));
updateWrapper.eq("order_no",notifyResult.getOutTradeNo());
orderService.update(updateWrapper);
}
// , ,
return WxPayNotifyResponse.success(" ");
} catch (Exception e) {
log.error(" , {}", e.getMessage());
// WxPayNotifyResponse.fail(e.getMessage());
return WxPayNotifyResponse.success("code:"+9999+" , :"+e.getMessage());
}
}
}
ステップ4:ウィジェット側で操作可能
ウィジェット側は主にウィジェットインタフェースを呼び出してユーザー情報を取得し、主にcodeであり、それからバックグラウンドに伝え、バックグラウンドはcodeを通じてopenid取得方式を取得する.
WxMaService wxService = WxMaConfiguration.getMaService(appid);
WxMaJscode2SessionResult wx_session = wxService.getUserService().getSessionInfo(code);
openId = wx_session.getOpenid();
log.info(" openId==>{}", openId);
その後,コールバックアドレスから返されたデータに基づいて,ウィジェットはデータを解析的にカプセル化して支払いインタフェースを呼び出して支払いを行うことができる.
ここで主に述べるバックエンドの使い方
==================================================================
ブログアドレス:https://www.codepeople.cn
==================================================================
転載先:https://www.cnblogs.com/lr393993507/p/10718136.html