支付资质:
必须有企业资质才能申请,个人暂无法申请。
官方开发文档:
微信支付官方文档地址:https://pay.weixin.qq.com/wiki/doc/api/index.html
微信接入一般有七种支付方式:JSAPI(公众号,小程序支付),Native支付(顾客扫码支付),付款码支付(商户扫码支付),APP支付,H5支付(外部链接支付),人脸支付。
支付宝支付官方文档地址:支付宝开放平台
支付宝支持一下支付方式:当面付(条码支付,扫码支付),刷脸支付,小程序支付,花呗分期,手机网站支付,电脑网站支付,APP支付等。
支付场景中的名词解释:
appid:应用id(一个应用可以有多个支付产品,建议小程序支付和App支付独立)
附微信支付使用的appid类型:
openid:是微信用户在公众号appid下的唯一用户标识(appid不同,则获取的openid就不同),可用于永久标识一个用户,微信独有,当交易方式为(只为)JSAPI时必传,地址一般在微信公众开放平台下寻找。
转账过程:以HTTP异步请求为例,支付结果以异步为准
A(建行) --------> 网联 --------> B(农行)转钱请求request
B(农行) --------> 网联 --------> A(建行) 收钱请求request
支付系统架构:
支付需要单独出来提供接口访问。
native扫码支付官方操作文档:
微信支付-普通下单开发者文档
二维码生成规则:code_url对应链接格式:weixin://weixin://pay.weixin.qq.com/bizpayurl/up?pr=NwY5Mz9&groupid=00。请商户调用第三方库将code_url生成二维码图片。该模式链接较短,生成的二维码打印到结账小票上的识别率较高,一般前端生成,后端生成有压力。
注意:
1.一个二维码的有效期是根据Native下单接口返回的code_url决定,code_url的有效期是2小时。
2.微信支付已经不支持通过长按识别二维码的方式或通过相册识别二维码的方式完成支付。
接入支付pom文件:
//支付sdk
cn.springboot
best-pay-sdk
1.3.0
//构建前端页面
org.springframework.boot
spring-boot-starter-freemarker
编写支付service方法:
@Slf4j
@Service
public class IPayService {
void create(String orderId, BigDecimal amount){
//构建WX支付配置参数
WxPayConfig wxPayConfig = new WxPayConfig();
wxPayConfig.setAppId("密钥");
wxPayConfig.setMchId("商户id");
wxPayConfig.setMchKey("商户密钥");
wxPayConfig.setNotifyUrl("接收支付平台异步返回的地址");
BestPayServiceImpl bestPayService = new BestPayServiceImpl();
bestPayService.setWxPayConfig(wxPayConfig);
//构建支付请求参数
PayRequest request = new PayRequest();
request.setOrderName(orderId);
request.setOpenid("支付id");
request.setOrderAmount(Double.valueOf(String.valueOf(amount)));
request.setPayTypeEnum(BestPayTypeEnum.WXPAY_NATIVE); //支付类型
PayResponse response = bestPayService.pay(request);
log.info("response={}",response);
}
}
编写构建前端页面:
构建Controller:
@RestController
@RequestMapping("/pay")
public class PayController {
@GetMapping("/create")
public ModelAndView create(){ //注意和create.ftl名字保持一致
return new ModelAndView("create");
}
}
在templates下创建create.ftl文件:
pay



