微信公众号之调起h5支付(代码详解)

微信公众号支付

最近公司项目做了微信公众号支付,也在网上看了其他网友写的关于微信公众号支付的博客,首先很感谢他们把代码贡献出来,由于微信公众号支付API文档的变化,有些博客上的代码不能复用,近期贡献出来的代码,虽新但是代码不全,所以我把自己的代码整理一下,没有大神们封装的那么好,但是简单可用,供网友参考,如有疑惑或更好的方法请留言,后期会有微信其他的支付代码贡献给大家:
- 第一部分:引入pom文件,我们用的是springboot框架,只需要引这一个依赖就行了

    <dependency>
        <groupId>jdom</groupId>
        <artifactId>jdom</artifactId>
        <version>1.1</version>
    </dependency>
  • 第二部分:前端js页面
  • 第一次用markdown编辑器,不熟悉,前端js页面代码不全,仅供参考

    $(function(){
        var url='********';//路径
        var orderId;
        $.ajax({
            type:"post",
            url:url+'这里添具体路径',
            dataType:'json',
            async:false,
            xhrFields: {
                withCredentials:true
            },
            crossDomain: true,
            success:function(data){
                orderId=data.data.orderId;
                var content;
                content =  '<div class="outer">'+data.data.orderDesc+'</div><div class="inner">'+data.data.orderMoney+'</div>';
                $('#content').append(content)
            }
        })
        var appId;
        var timeStamp;
        var nonceStr;
        var package;
        var signType;
        var paySign;
        $.ajax({
            type:"post",
            url:url+'这里添具体路径',
            dataType:'json',
            async:false,
            data:{"orderId":orderId},
            xhrFields: {
                withCredentials:true
            },
            crossDomain: true,
            success:function(data){
                console.log(data)
                appId=data.data.appId
                timeStamp=data.data.timeStamp
                nonceStr=data.data.nonceStr
                package=data.data.package
                signType=data.data.signType
                paySign=data.data.paySign
            }
        })
        function onBridgeReady(){
            WeixinJSBridge.invoke('getBrandWCPayRequest', {
                "appId":appId,     //公众号名称,由商户传入     
                "timeStamp":timeStamp,         //时间戳,自1970年以来的秒数     
                "nonceStr":nonceStr, //随机串     
                "package":package,     
                "signType":signType,         //微信签名方式:     
                "paySign":paySign    //微信签名 
            },function(res){
                if(res.err_msg == "get_brand_wcpay_request:ok"){  
                     window.location.replace("user_index.html")
                }else if(res.err_msg == "get_brand_wcpay_request:cancel"){  
                    alert("取消支付!");
                }else{  
                    alert("支付失败!");
                }  
            }); 
        }
        function pay(){
            if (typeof WeixinJSBridge == "undefined"){
               if( document.addEventListener ){
                   document.addEventListener('WeixinJSBridgeReady',onBridgeReady,false);
               }else if (document.attachEvent){
                   document.attachEvent('WeixinJSBridgeReady', onBridgeReady); 
                   document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
               }
            }else{
               onBridgeReady();
            }       
        }
        $('#yajin').click(function(){
            pay()
        })
    })
    
  • 第三部分后端代码

  • 如果在用户登陆微信公众号时,就获取了openId,不用再用tookie获取了,拿来直接用就行了
    package yangxiaosong.yangweixin;
    import com.alibaba.fastjson.JSONObject;
    import yangxiaosong.controller.wxpayutils.WXConfig;
    import yangxiaosong.dataobject.user.User;
    import yangxiaosong.dataobject.wxpay.WXPayOrder;
    import yangxiaosong.enums.PayStatusEnum;
    import yangxiaosong.service.ReturnRecordService;
    import yangxiaosong.service.UserService;
    import yangxiaosong.service.WXPayOrderService;
    import yangxiaosong.utils.CookieUtil;
    import yangxiaosong.utils.RedisUtil;
    import yangxiaosong.utils.ResultVOUtil;
    import yangxiaosong.viewobject.ResultVO;
    import lombok.extern.slf4j.Slf4j;
    import org.jdom.JDOMException;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.StringRedisTemplate;
    import org.springframework.web.bind.annotation.*;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.math.BigDecimal;
import java.util.*;

@RestController
@RequestMapping(“/wxpay”)
@Slf4j

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值