1. 发起支付

1.1. 请求地址

关键类:net.mingsoft.pay.action.web.PayAction.java 关键方法:geteway(....)

1.2. 支付范例

支付须配置支付宝配置或微信支付配置

1.2.1. 支付宝支付

第一步:配置相关支付宝的支付配置;

第二步:编写html代码,写一个简单form表单;

alipay.html

...
<!--支付宝支付,提交成功后直接跳转支付宝支付-->
<form action="http://项目地址/mpay/pay/gateway.do" method="post">
    <input type="hidden" name="returnUrl" value="http://项目地址/ok.jsp"/><!--支付成功返回地址-->
    <input type="hidden" name="orderNo" value="8888888"/><!--订单号-->
    <input type="hidden" name="orderName" value="铭飞开源赞助"/><!--订单名称-->
    <input type="hidden" name="type" value="alipay"/><!--支付类型-->
    <input type="hidden" name="orderPrice" value="0.01"/><!--价格-->
    <input type="hidden" name="orderDesc" value="价值源自分享"/><!--商品描述-->
    <input type="hidden" name="showUrl" value="http://www.mingsoft.net"/><!--商品展示网址-->
    <input type="submit" value="确认">
</form>
...

1.2.2. 微信扫码支付

第一步:配置微信支付相关的支付配置;

第二步:编写html代码,写一个简单form表单;

根据表单提交的结果显示二维码图片,通常结合ajax来实现

...
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>

<form>
    <input type="hidden" name="orderNo" value="8888888"/><!--订单号-->
    <input type="hidden" name="type" value="weixin"/><!--支付类型-->
    <input type="hidden" name="orderPrice" value="0.01"/><!--价格-->
    <input type="hidden" name="orderDesc" value="价值源自分享"/><!--商品描述-->
    <input type="submit" value="确认">
</form>

    <!--显示二维码-->
    <img  width="100" height="100"/>

<script>
$.ajax({
   type: "POST",
   dataType:"json",
   url: "http://项目地址/mpay/pay/gateway.do",
   data: $("form").serialize(),
   success: function(json){
     $("img").attr("src","http://项目地址/qrcode?contents="+json.resultMsg)
   }
});
</script>
...

1.2.3. 微信公众号支付

微信公众号支付需要在公众号内部完成,同时用户需要进行授权登录

参考微信官方文档_https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1

编写html代码,写一个简单form表单

...
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<!--创建支付表单页面-->
<form id="weixin" name="weixin" >
    <input type="hidden" name="orderNo" value="888888888"/><!--订单编号-->
    <input type="hidden" name="type" value="weixin"/><!--支付类型-->
    <input type="hidden" name="orderPrice" value="0.01"/><!--价格-->
    <input type="hidden" name="orderDesc" value="测试公众号支付"/><!--描述-->
    <input type="hidden" name="page" value="http://项目地址/wx-mp-pay.jsp"/><!--接收微信支付授权信息的页面-->
    <!--多个公众号支付必传-->
    <input type="hidden" name="appId" value="xxxxxxxx"/><!--微信appId-->
    <input type="hidden" name="mchId" value="1234567890"/><!--微信支付商户号-->
    <input type="hidden" name="key" value="xxxxxxxx"/><!--微信支付API密钥-->
    <input type="hidden" name="secret" value="xxxxxxxx"/><!--Appsecret-->
    <input type="submit" value="确认">
</form>
...
<script>
//授权登录,需要用户配置微信appid和项目请求支付地址
function weixinPay(){
    location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=微信appid&redirect_uri=" + encodeURIComponent("http://项目地址/mpay/pay/gateway.do?" + $("#weixin").serialize()) + "&response_type=code&scope=snsapi_userinfo#wechat_redirect";
}
</script>
...

确认支付

...
<!--确认支付页面-->
<input type="button" onclick="pay()"  value="支付"/>
<script>
function pay() {
    WeixinJSBridge.invoke(
               'getBrandWCPayRequest',  {
                   "appId":<%=request.getParameter("appId")%>,     //公众号名称,由商户传入
                   "timeStamp":"<%=request.getParameter("timeStamp")%>",         //时间戳,自1970年以来的秒数
                   "nonceStr":"<%=request.getParameter("nonceStr")%>", //随机串
                   "package":"<%=request.getParameter("package")%>",
                   "signType":"MD5",         //微信签名方式:
                   "paySign":"<%=request.getParameter("sign")%>" //微信签名
              },
              function(res){
                   if (res.err_msg == "get_brand_wcpay_request:ok") {
                      alert("微信支付成功!");
                  } else if (res.err_msg == "get_brand_wcpay_request:cancel") {
                      alert("用户取消支付!");
                  } else {
                      alert(JSON.stringify(res));
                  }
               }
    );
}
</script>
...

1.2.4. 微信刷卡支付

刷卡支付场景描述:用户出示微信付款二维码 、 商户使用扫码枪扫码,用户输入支付密码(小额免密),商务系统提示支付成功。

开发者需要制作一张支付表单页面,提交后直接返回支付结果

wx-card-pay.html

...
<!-- 微信刷卡支付,刷卡成功后会直接扣款,金额过大或其他原因会需要支付密码 -->
<!-- 具体参考微信官方文档:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=5_1 -->
<form id="submit" name="weixin" action="http://域名/项目/mpay/pay/gateway.do" method="post">
    <input type="hidden" name="orderNo" value="888888"/><!--订单编号-->
    <input type="hidden" name="type" value="weixin"/><!--支付类型-->
    <input type="hidden" name="orderPrice" value="0.01"/>
    <input type="hidden" name="orderDesc" value="铭飞商超系统"/>
    <input type="text" name="authCode" value="45454XXXX3FF"/> <!--通过扫描枪扫码获取,可手动输入付款码底部对应的字符串-->
    <input type="submit" value="确认">
</form>
...

2. 发起退款

2.1. 业务方法

关键类:net.mingsoft.pay.biz.IPayBiz 关键方法:refund(....)

2.2. 范例

...
PayRefundBean payRefundBean = new PayRefundBean();
payRefundBean.setOrderNo("201908080808"); //订单号
payRefundBean.setType("WEI_XIN"); //支付宝支付:ALI_PAY 微信支付:WEI_XIN
payRefundBean.setPrice("8.8"); //退款费用

if(!net.mingsoft.pay.biz.IPayBiz.refund(payRefundBean){
   System.out.print("退款失败");   
} else {
   System.out.print("退款成功");   

}
...

3. 支付回调

第三方支付平台会通过发起请求回调的通知业务系统支付的状态,业务系统根据返回的支付状态进行业务逻辑代码编写。

日志注解

注解可以保证将支付信息记录都交易日志表里面,推荐使用

@MPayNotifyLogAnn

3.1. 范例

只适用Spring MVC方式

...
@RequestMapping("/notify")
@MPayNotifyLogAnn 
@ResponseBody
public void notify(HttpServletRequest request,HttpServletResponse response){
    //根据对接的支付接口编写代码,具体请参考对接支付平台的接口文档
}
...

Copyright © mingsoft.net 2019 all right reserved,powered by Gitbook该文件修订时间: 2020-05-25 13:44:33

results matching ""

    No results matching ""

    results matching ""

      No results matching ""