精华内容
下载资源
问答
  • 基于php核心开发直播盒子,可做成四端合一,PC+WAP+IOS+Android可封装APP 基于php核心开发直播盒子,可做成四端合一,PC+WAP+IOS+Android可封装APP
  • 声鉴卡H5网页源码,完整可运转,调用wx录音,自动判断声音属性,输出结果,吸粉 具体怎么运营,自己发挥,源码简单,只需要把源码上传至主机就可以 网盘下载地址: https://zijiewangpan.com/V0aQJMNHL9k 图片: ...

    介绍:

    声鉴卡H5网页源码,完整可运转,调用wx录音,自动判断声音属性,输出结果,吸粉
    具体怎么运营,自己发挥,源码简单,只需要把源码上传至主机就可以


    网盘下载地址:

    https://zijiewangpan.com/V0aQJMNHL9k


    图片:


    展开全文
  • 黄金矿工H5网页源代码
  • 企业门户网站系统源代码 java 响应式企业官网成品源码 公司行业通用源代码 web网站出售 可二次开发源码 项目介绍: 企业门户网站系统能够通过互联网得到广泛的、全面的宣传,让尽可能多的企业了解和熟知企业门户网站...

    QQ:464652874 加Q备注:csdn

    项目具体详情点击这

    企业门户网站系统源代码 java 响应式企业官网成品源码 公司行业通用源代码 web网站出售 可二次开发源码

    项目介绍:

    企业门户网站系统能够通过互联网得到广泛的、全面的宣传,让尽可能多的企业了解和熟知企业门户网站系统的便捷高效,不仅为用户提供了服务,而且也推广了自己,让更多的用户了解自己。对于企业而言,若拥有自己的企业门户网站系统,通过企业门户网站系统让企业的宣传、营销提上一个新台阶,同时提升了企业形象。

    技术介绍:

    前端页面自适应,支持PC和H5手机端、平板电脑,后端支持换肤

    前端主要框架技术:freemarker+html+jquery+bootstrap+layUI

    后端主要框架技术:spring+springMVC+mybatis+quartz+shiro+ehcache+logback+maven+Druid数据监控

    数据库:mysql

    开发工具:Myeclipse或Eclipse、jdk1.7或1.8、tomcat7或8、mysql5.6、5.6或5.7数据库。

    部分效果图:

    电脑打开首页效果图
    手机端打开效果图
    在这里插入图片描述

    项目具体详情介绍请点击这

    展开全文
  • H5网页版贪吃蛇源代码

    万次阅读 2017-06-15 16:25:27
    H5网页版贪吃蛇源代码,新建文本文档,将下面的代码复制粘贴到文本文档,然后保存文件。重命名文件及后缀名为index.html。将文章最下面的两个图片保存下来,蓝色背景大图重命名为back.jpg,骷髅头的命名为pirate.png...

    H5网页版贪吃蛇源代码,新建文本文档,将下面的代码复制粘贴到文本文档,然后保存文件。重命名文件及后缀名为index.html。将文章最下面的两个图片保存下来,蓝色背景大图重命名为back.jpg,骷髅头的命名为pirate.png。在index.html同级目录下新建一个文件夹叫做image,然后将两张背景图放入image文件夹。现在index.html就可以正常运行了,双击就可以运行。


    <html lang="en">
      <head>
        <meta charset=GB2312>
        <title></title>
        <meta name="description" content="HTML5/canvas demo, 500 particles to play around with." />
        <meta name="keywords" content="html5,canvas,javascript,particles,interactive,velocity,programming,flash" />
       <style>
    html, body {
                text-align: center;
                margin:0;
                padding:0;
                background: #000000; 
                color: #666666;
                line-height: 1.25em;
            }       
    
            #outer {
                position: absolute;
                top: 50%;
                left: 50%;
                width: 1px;
                height: 1px;
                overflow: visible;
            }       
    
            #canvasContainer { 
                position: absolute;
                width: 1000px;
                height: 560px;
                top: -280px;
                left: -500px;
            }
    
            canvas { 
                border: 1px solid #333333; 
            }
    
            a {
                color: #00CBCB;
                text-decoration:none;
                font-weight:bold;
            }
            a:hover {
                color:#FFFFFF;
            }
    
            #output {
                font-family: Arial, Helvetica, sans-serif; 
                font-size: 0.75em;
                margin-top:4px;
            }
    
            #footer{
                font-size: 0.6em;
                font-family: Arial, Helvetica, sans-serif;
                position: absolute;
                bottom:8px;
                width:98%;
            }
    
    </style>
      </head>
    
      <body>
        <div id="outer">
            <div id="canvasContainer">
                <canvas id="mainCanvas" width="1000" height="560" style="border:1px solid #c3c3c3;"></canvas>
                <div id="output"></div>
            </div>
        </div>
    <script type="text/javascript">
    (function(){
    
        var PI_2        = Math.PI * 2;
    
        var canvasW     = 1000;
        var canvasH     = 560;
        var numMovers   = 600;
        var friction    = 0.96;
        var movers      = [];
        var i=0;
        var canvas;
        var ctx;
        var canvasDiv;
        var outerDiv;
        var spring=0.12;
        var mouseX;
        var mouseY;
        var mouseVX;
        var mouseVY;
        var prevMouseX;
        var prevMouseY;
        var isMouseDown;
        var snake;
        var _food;
        var speed=3;
        var gameOver=false;
        var score=0;
        var Difficulty;
        var gameState=0;//一共四个值,0,1,2,3,4,5分别对应开始开始菜单界面,正在游戏中,暂停,结束,超时,查看排名
        var playButton;
        var configButton;
        var RankingButton;
        var buttonArray=[];
        var buttonIndex=0;
        var backImage;
        var remainTime;
        function initFarm(){
            canvas = document.getElementById("mainCanvas"); 
            if ( canvas.getContext ){
                setup();
                perform=setInterval( run , speed );
            }
        }
    
        function setup(){
            outerDiv  = document.getElementById("outer");
            canvasDiv = document.getElementById("canvasContainer");
            ctx = canvas.getContext("2d");
            remainTime=59;
            beginTime=new Date().getSeconds();
            snake=new Asphyre(200,200,500,5);
            _food=new food(20*Math.floor(Math.random()*50),20*Math.floor(Math.random()*28));
            snake.init();
            pirate=new pirateImage(150,0,256,256,0);
            playButton=new button("Play",900,200,70,20*Math.PI/180,"blue");
            configButton=new button("Config",900,300,70,20*Math.PI/180,"blue");
            rankingButton=new button("Ranking",900,400,70,20*Math.PI/180,"blue");
            buttonArray.push(playButton);
            buttonArray.push(configButton);
            buttonArray.push(rankingButton);
            mouseX = prevMouseX = canvasW * 0.5;
            mouseY = prevMouseY = canvasH * 0.5;
    
            document.onmousedown = onDocMouseDown;
            document.onmouseup   = onDocMouseUp;
            document.onmousemove = onDocMouseMove;
        }
    
        function addNewRanking(user,score){
    
            var info=user+": "+score
            $.post(
                    "${pageContext.request.contextPath}/graph_toXml.action",
                    {info:info},
                    function(data){
                    }
            );
        }
    
        function showRanking(context){
            var ForReading = 1;
            var fso=new ActiveXObject("Scripting.FileSystemObject");
            var ts = fso.OpenTextFile("c:\\Ranking.txt", ForReading);
            s = ts.ReadLine();
            context.fillStyle = "rgba(102,195,226,1)";
            context.fillRect( 0 , 0 , canvasW , canvasH );  
            context.font="30px impact";   
            context.fillStyle="green";   
            context.textAlign="center";   
            context.fillText(s,500,50); 
            ts.Close(); 
        }
        function drawText(context){
            context.font="22px impact";   
            context.fillStyle="red";   
            context.textAlign="center";   
            context.fillText("Score:"+score,950,30); 
            context.fillText("Time:"+remainTime,50,30);
    
        }
        function drawBackground(context){
            backImage=new Image();
            backImage.src="image/back.jpg";
            context.drawImage(backImage,0,0,1000,560);  
        }
        var tweenLite=function(obj,endX,endY){  
            obj.x+=(endX-obj.x)*spring
            obj.y+=(endY-obj.y)*spring
        }
        var button=function(text,x,y,size,angle,color){
            this.text=text;
            this.x=x;
            this.y=y;
            this.size=size;
            this.angle=angle;
            this.color=color;
        }
        button.prototype={
            drawButton:function(context){
                var self=this;
                context.font="70px impact";   
                context.fillStyle="cfcfcf";  
                //context.fillRect(self.x, self.y-70, 500, 80);   
                //context.strokeRect(self.x, self.y-70, 500, 80);
                context.fillStyle=self.color;  
                context.strokeStyle="white";
                context.fillText(self.text,self.x,self.y);
                context.font="71px impact";   
                context.strokeText(self.text,self.x,self.y);
            },
            shake:function(context){
                var self=this;
                context.save();
                self.angle-=self.angle*spring;      
                context.rotate(self.angle);
                context.font="70px impact";   
                context.fillStyle="cfcfcf";  
                context.fillStyle="yellow";  
                context.strokeStyle="white";
                context.fillText(self.text,self.x,self.y);
                context.font="71px impact";   
                context.strokeText(self.text,self.x,self.y);
                context.restore();      
            },
            springSports:function(context,y)
            {
                var self=this;
                self.y-=(self.y-y)*spring;
                context.font="70px impact";   
                context.fillStyle="cfcfcf";  
                context.fillStyle="yellow";  
                context.strokeStyle="white";
                context.fillText(self.text,self.x,self.y);
                context.font="71px impact";   
                context.strokeText(self.text,self.x,self.y);
            }           
        }
    
        var pirateImage=function(x,y,w,h,rotate){
            this.x=x;
            this.y=y;
            this.w=w;
            this.h=h;
            this.rotate=rotate;
        }
        pirateImage.prototype={
            drawPirate:function(){
                var self=this;
                var image=new Image();
                image.src="image/pirate.png";
                ctx.drawImage(image,self.x,self.y,self.w,self.h);
            }
        }
        function run(){
            ctx.fillStyle = "rgba(8,8,12,1)";
            ctx.fillRect( 0 , 0 , canvasW , canvasH );  
            if(gameState==0){//开始菜单状态
                drawBackground(ctx);
                playButton.drawButton(ctx);
                configButton.drawButton(ctx);
                rankingButton.drawButton(ctx);          
                pirate.drawPirate();
                new tweenLite(pirate,150,150);
                new tweenLite(playButton,650,200);
                if(playButton.x<700){
                    new tweenLite(configButton,650,320);
                }
                if(configButton.x<700){
                    new tweenLite(rankingButton,650,440);
                }
                for(var i=0;i<buttonArray.length;i++){
                    if(i==buttonIndex){
                        //buttonArray[i].color="yellow";    
                        buttonArray[i].shake(ctx);
                        //var y=buttonArray[i].y;
                        //buttonArray[i].springSports(ctx,y);
                    }
                    else{
                        buttonArray[i].angle=20*Math.PI/180;
                        buttonArray[i].color="blue";
                    }           
                }
                currentButton=buttonArray[buttonIndex];
                document.onkeydown=function(event){
                    var code = event.keyCode 
                    switch(code) {  
                        case 38: //向上   
                            buttonIndex--;
                            if(buttonIndex<0){
                                buttonIndex=buttonArray.length-1;
                            }
                            break;   
                        case 40: //向下   
                            buttonIndex++;
                            if(buttonIndex>buttonArray.length-1){
                                buttonIndex=0;
                            }
                            break;  
    
                        case 13: //回车
                            if(buttonIndex==0){
                                gameState=1;  //进入游戏
                                clearInterval(perform);  
                                speed=99;
                                perform=setInterval( run , speed );
                            }
                            if(buttonIndex==2){
                                //gameState=5;  //查看排名
                            }
                            break;
                    }
    
                }
                if(rankingButton.x<651){
                    //buttonArray[buttonIndex].color="yellow";
                    //buttonArray[buttonIndex].shake(ctx);
                }
            }
            if(gameState==2){
                ctx.fillStyle = "rgba(102,195,226,1)";
                ctx.fillRect( 0 , 0 , canvasW , canvasH );  
                drawText(ctx);
                _food.drawFood(ctx);
                snake.drawNodes(ctx);
                clearInterval(perform); 
                document.onkeydown = function(event) {      
                    var code = event.keyCode;
                    switch(code){   
                        case 32: //暂停
                            gameState=1;
                            perform=setInterval( run , speed );
                            break;
                    }  
                }
            }
            if(gameState==3){
                snake.die();
            }
    
            if(gameState==5){
                showRanking(ctx);
            }
            if(gameState==4){
                snake.drawTimeout(ctx);
    
    
            }
            if(gameState==1){
                ctx.fillStyle = "rgba(102,195,226,1)";
                ctx.fillRect( 0 , 0 , canvasW , canvasH );  
                var currentSeconds=new Date().getSeconds();
                if(currentSeconds!=beginTime){
                    remainTime--;
                    if(remainTime<0){
                        remainTime=0;
                        $.messager.prompt('My Title', '请输入你的姓名', function(r){
                            if (r){
                                $.messager.alert('My Title',r+",您的得分信息已经上传到排名","");
                            }
                        });
                        //addNewRanking(str,score);
                        //gameState=4;  
                        clearInterval(perform); 
                    }
                    beginTime=currentSeconds;
                }
                document.onkeydown = function(event) {      
                    var code = event.keyCode   
                    var isException = false;   
                    switch(code){   
                        case 37: //向左   
                            if(snake.direction!="right"){   
                                snake.direction ="left";
                            } else isException = true;   
                            break;   
                        case 38: //向上   
                            if(snake.direction!="down"){   
                                snake.direction ="up";   
                            } else isException = true;   
                            break;   
                        case 39: //向右   
                            if(snake.direction!="left"){   
                                snake.direction = "right";
                            } else isException = true;   
                            break;   
                        case 40: //向下   
                            if(snake.direction!="up"){   
                                snake.direction = "down";   
                            } else isException = true;   
                            break; 
                        case 32: //暂停
                            gameState=2; 
                            break;
                    }  
                }
                drawText(ctx);
                _food.drawFood(ctx);
                snake.drawNodes(ctx);
                snake.go();
            }
        }
    
    
        function onDocMouseMove( e ){
            var ev = e ? e : window.event;
            mouseX = ev.clientX - outerDiv.offsetLeft - canvasDiv.offsetLeft;
            mouseY = ev.clientY - outerDiv.offsetTop  - canvasDiv.offsetTop;
        }
    
        function onDocMouseDown( e ){
            isMouseDown = true;
            return false;
        }
    
        function onDocMouseUp( e ){
            isMouseDown = false;
            return false;
        }
    
        var AsphyreNode=function(x,y,w,h){
            this.x=x;
            this.y = y;   
            this.w = w;   
            this.h = h;
        }
        AsphyreNode.prototype={
            equals:function(node){
                if(this.x==node.x&&this.y==node.y)
                    return true;
                return false;
            }
        }
    
        function Asphyre(x,y,speed,initNodes){
            var self=this;
            self.speed=speed;
            self.initNodes=initNodes;
            self.speedParam = speed * initNodes; 
            self.nodeSize=20;
            self.nodes=[];
            self.x=x;
            self.y=y;
            self.direction="right";
            document.onkeydown = function(event) {      
                var code = event.keyCode   
                var isException = false;   
                switch(code) {   
                    case 37: //向左   
                        if(self.direction!="right"){   
                            self.direction ="left";
                        } else isException = true;   
                        break;   
                    case 38: //向上   
                        if(self.direction!="down"){   
                            self.direction ="up";   
                        } else isException = true;   
                        break;   
                    case 39: //向右   
                        if(self.direction!="left"){   
                            self.direction = "right";
                        } else isException = true;   
                        break;   
                    case 40: //向下   
                        if(self.direction!="up"){   
                            self.direction = "down";   
                        } else isException = true;   
                        break;   
                }   
                if(isException){   
                        alert("方向异常,不能沿反方向后退!");   
                }   
            }
        }
        Asphyre.prototype={
            init:function(){
                var self=this,x=self.x,y=self.y;
                this.nodes=[];
                for(var i=0;i<this.initNodes;i++){
                    this.nodes[i]=new AsphyreNode(self.x-i*20,self.y,self.nodeSize,self.nodeSize);
                }
            },  
            drawNodes:function(context){   //绘制设身体   
                var self = this;   
                context.fillStyle = "blue";   
                context.strokeStyle = "#ffffff";   
                for(var i = 0; i < this.nodes.length; i++) {   
                    context.fillRect(this.nodes[i].x, this.nodes[i].y, this.nodeSize, this.nodeSize);   
                    context.strokeRect(this.nodes[i].x, this.nodes[i].y, this.nodeSize, this.nodeSize);   
                }   
            },
            go:function(){
                var self = this;
                if(self.direction=="left"){
                    if(self.nodes[0].equals(new AsphyreNode(_food.x,_food.y,self.nodeSize,self.nodeSize))) {//吃到食物,少走一步   
                        self.eatFood();    
                    }  
                    self.judgeOut();
                    for(var i=self.nodes.length-2;i>=0;i--){
                        self.nodes[i+1].x=self.nodes[i].x;
                        self.nodes[i+1].y=self.nodes[i].y;
                    }
                    self.nodes[0].x-=self.nodeSize; 
                }
                if(self.direction=="right"){
                    if(self.nodes[0].equals(new AsphyreNode(_food.x,_food.y,self.nodeSize,self.nodeSize))) {//吃到食物,少走一步   
                        self.eatFood();    
                    } 
                    self.judgeOut();
                    for(var i=self.nodes.length-2;i>=0;i--){
                        self.nodes[i+1].x=self.nodes[i].x;
                        self.nodes[i+1].y=self.nodes[i].y;
                    }
                    self.nodes[0].x+=self.nodeSize;
                }
                if(self.direction=="up"){
                    if(self.nodes[0].equals(new AsphyreNode(_food.x,_food.y,self.nodeSize,self.nodeSize))) {//吃到食物,少走一步   
                        self.eatFood();   
                    } 
                    self.judgeOut();
                    for(var i=self.nodes.length-2;i>=0;i--){
                        self.nodes[i+1].x=self.nodes[i].x;
                        self.nodes[i+1].y=self.nodes[i].y;
                    }
                    self.nodes[0].y-=self.nodeSize;
                }
                if(self.direction=="down"){
                    if(self.nodes[0].equals(new AsphyreNode(_food.x,_food.y,self.nodeSize,self.nodeSize))) {//吃到食物,少走一步 
                        self.eatFood();  
                    } 
                    self.judgeOut();
                    for(var i=self.nodes.length-2;i>=0;i--){
                        self.nodes[i+1].x=self.nodes[i].x;
                        self.nodes[i+1].y=self.nodes[i].y;
                    }
                    self.nodes[0].y+=self.nodeSize;
                }
            },
            eatFood:function(){
                var self=this;
                self.nodes.unshift(new AsphyreNode(_food.x,_food.y,self.nodeSize,self.nodeSize));
                score+=10;
                _food=new food(20*Math.floor(Math.random()*50),20*Math.floor(Math.random()*28));
                if((self.nodes.length-self.initNodes)%3==0){
                    speed-=11;
                }   
                clearInterval(perform);  
                perform=setInterval( run , speed );
            },
            judgeOut:function(){
                var self=this;
                if(self.nodes[0].y>canvasH-self.nodeSize||self.nodes[0].y<0){
                    gameState=3;
                }
                if(self.nodes[0].x>canvasW-self.nodeSize||self.nodes[0].x<0){
                    gameState=3;
                }
            },
            die:function(){
                var self=this;  
                self.nodes=[];
                _food=null;     
                self.drawOver(ctx);
            },
            drawOver:function(context){
                context.font="60px impact";   
                context.fillStyle="red";   
                context.textAlign="center";   
                context.fillText("GAME OVER!",500,250); 
            },
            drawTimeout:function(context){
                context.font="60px impact";   
                context.fillStyle="red";   
                context.textAlign="center";   
                context.fillText("TIME OUT! YOUR SCORE IS "+score,500,250);     
            }
        }
    
        function food(x,y){
            this.x=x;
            this.y=y;
        }
    
        food.prototype={
            drawFood:function(context){
                var self = this;   
                context.fillStyle = "yellow";   
                context.strokeStyle = "#ffffff"; 
                context.fillRect(self.x, self.y, 20, 20);   
                context.strokeRect(self.x, self.y, 20, 20);
            }
        }
        function rect( context , x , y , w , h ){
            context.beginPath();
            context.rect( x , y , w , h );
            context.closePath();
            context.fill();
        }
    
    
        window.onload = initFarm;
    
    })();
    
    </script>   
    
      </body>
    </html>
    

    这里写图片描述

    这里写图片描述

    展开全文
  • 11套情人节表白源码下载+手机自己生成软件,已去后门 。
  • 10分钟搞定 php+H5手机网页微信支付 在线视频教程(含源代码)01-微信支付H5开通和设置说明02-微信支付H5的核心代码设置和公众号支付的区别
  • H5网页综合案例开发实战视频教程(含案例网站源码).rar
  • h5 小游戏合集800m 网页小游戏源码 可直接运行 h5 小游戏合集800m 网页小游戏源码 可直接运行 h5 小游戏合集800m 网页小游戏源码 可直接运行
  • 简单的H5网页制作

    2019-01-08 08:56:19
    制作的一个很简单的关于民谣的H5网页,里面有一些简单的hover动画和JQL动画,拿来应付大学作业够了
  • h5模板 h5网页资源

    2018-05-09 15:19:54
    上传一些html5模板资源,企业网站,电商网站,个人博客等应有尽有
  • H5网页综合案例视频教程,共33集,主要内容是讲解一个包含五屏的网页综合案例效果如何使用H5+css3实现的全过程,网页每一屏展示的效果和功能都不尽相同。 第1章 1-9集视频课 h5前端综合实例开发教学第01集...
  • 404错误页面提示H5网页模板
  • 极奇公司成长计划,公众号h5网页。可以设定公司或者工作室成立日期,带微信分享功能,演示地址:关注公众号:极奇 ,在成长计划打开查看
  • maiyouH5:买友h5网页原始码,包含客户端和服务器端
  • 微信H5网页公众号支付教程附demo

    万次阅读 多人点赞 2016-11-23 17:40:08
    微信H5网页公众号支付教程附demo开发之前请详细阅读微信公众号支付开发文档,并配置好服务器信息。 微信支付开发文档1.微信支付申请,开通微信商户平台。 2.开发配置,填写服务器地址。 3.在开发电脑上安装证书...

    微信H5网页公众号支付教程附demo

    开发之前请详细阅读微信公众号支付开发文档,并配置好服务器信息。
    微信支付开发文档

    1.微信支付申请,开通微信商户平台。
    这里写图片描述

    2.开发配置,填写服务器地址。
    这里写图片描述
    这里写图片描述

    3.在开发电脑上安装证书,用于设置获取商户秘钥。
    这里写图片描述

    4.设置获取秘钥。
    这里写图片描述

    开始开发
    1.用户点击下面页面自动跳转到微信授权链接。
    index.html

    <!DOCTYPE HTML>
    <html>
      <head>
      	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    	<meta http-equiv="description" content="This is my page">
      </head>
      <body>
      <script type="text/javascript">
    		//用户点击跳转地址(非静默授权) 参数appid为公众号的id redirect_uri为微信回调接口 state为可携带的参数
    		window.location.href="https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=http://你的域名/weChatpay/mainServlet&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect";
    
      </script>
    
      </body>
    </html>
    
    

    2.微信回调处理函数。
    MainServlet.java

    package com.servlet;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import net.sf.json.JSONObject;
    import com.utils.CommonUtil;
    
    public class MainServlet extends HttpServlet {
    
    	//网页授权获取用户信息
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		
    		String appid = "";//公众号appid
    		String appsecret = "";//公众号秘钥
    		//微信返回的code
    		String code = request.getParameter("code");
    		
    		//获取openId和access_token(获取openId后调用统一支付接口https://api.mch.weixin.qq.com/pay/unifiedorder)
    		String openId = "";
    		String access_token = "";
    		String URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+appid+"&secret="+appsecret+"&code="+code+"&grant_type=authorization_code";
    		JSONObject jsonObject = CommonUtil.httpsRequest(URL, "GET", null);
    		if (null != jsonObject) {
    			openId = jsonObject.getString("openid");
    			access_token = jsonObject.getString("access_token");
    		}
    		request.getSession().setAttribute("openId", openId);
    		
    		//获取用户信息
    		String nickname = "";
    		String headimgurl = "";
    		String userURL = "https://api.weixin.qq.com/sns/userinfo?access_token="+access_token+"&openid="+openId+"";
    		JSONObject userJson = CommonUtil.httpsRequest(userURL, "GET", null);
    		if (null != jsonObject) {
    			nickname = userJson.getString("nickname");
    			headimgurl = userJson.getString("headimgurl");
    		}
    		request.getSession().setAttribute("nickname", nickname);
    		request.getSession().setAttribute("headimgurl", headimgurl);
    		
    		response.sendRedirect("shop/index.jsp");//跳转到支付页面
    		
    	}
    
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		doGet(request, response);
    	}
    }
    
    

    3.支付页面ajax请求接口获取微信网页调起微信支付的相关参数(详见文档),用户点击购买的时候,请求接口获取支付参数。
    shop/index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
    <% String path=request.getContextPath(); String basePath=request.getScheme()+ "://"+request.getServerName()+ ":"+request.getServerPort()+path+ "/"; %>
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>    
          <head>
            <meta charset="utf-8">
            <meta name="viewport" content="width=device-width,initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no" />
            <title>微信商城</title>
            
            <link href="css/style.css" rel="stylesheet">
            <link rel="stylesheet" type="text/css" href="touchTouch/touchTouch.css">
            <link rel="stylesheet" href="css/pintuer.css">
            <script type="text/javascript" src="js/jquery.min.js"></script>
            <script src="js/script.js"></script>
            <script src="js/jquery.js"></script>
            <script src="js/jquery-1.7.1.min.js"></script>
            <script src="touchTouch/touchTouch.jquery.js"></script>
            <script type="text/javascript" src="js/jquery.Spinner.js"></script>
            
            <script type="text/javascript">//参与人数加减
              $(function() {
                $("#d").Spinner();
                $('.thumbs-img').each(function() {
                  $(this).children('a').touchTouch();
                });
              });
    
              //点击图片
              $('.thumbs-img').each(function() {
                9 * $(this).children('a').touchTouch();
              });
    		</script>
          </head>
          
          <body>
            <section>
              <banner>
                <img src="img/ban.jpg">
                <yiny></yiny>
              </banner>
              <div class="jindutiao">
                <p>第一期:上海迪士尼门票</p>
                <!--进度条-->
                <progress value="" max=""></progress>
                <div class="canshu">
                  <div class="canshu_l">
                    <font></font>
                    <p>已参与人次</p>
                  </div>
                  <div class="canshu_z">
                    <font></font>
                    <p>总需人次</p>
                  </div>
                  <div class="canshu_r">
                    <font></font>
                    <p>剩余人次</p>
                  </div>
                </div>
              </div>
              <div class="centerq">
                <!--参与人数加减 开始-->
                <div class="center">
                  <p>我要参与</p>
                  <div id="d" class="Spinner"></div>
                  <p>人购买人次越多获得几率越大哦!</p>
                </div>
                <!--参与人数加减 结束-->
                <div class="canyu">
                  <p>购买</p>
                </div>
              </div>
              <!--三个切换卡-->
              <div id="cen_right_top">
                <h3 class="active">商品介绍</h3>
                <h3>夺宝记录</h3>
                <h3>用户晒单</h3>
                <!--商品介绍-->
                <div style="display:block" class="tab_show">
                  <div class="know">
                    <p>您需要知道的"香港迪士尼乐园"</p>
                    <ul>
                      <li>
                        <span>特色1</span>&nbsp;&nbsp;迪士尼全球的第十一个主题乐园</li>
                      <li>
                        <span>特色2</span>&nbsp;&nbsp;根据加州迪士尼为蓝本的主题乐园</li>
                      <li>
                        <span>特色3</span>&nbsp;&nbsp;欣赏百老汇式精彩表演</li>
                      <li>
                        <span>特色4</span>&nbsp;&nbsp;畅玩乐趣无穷的动感机动游戏</li></ul>
                    <p>香港迪士尼乐园简介</p>
                    <ul>
                      <li>香港迪士尼乐园度假区位于香港大屿山,于2005年9月开幕,为宾客提供奇妙迪士尼体验。</li>
                      <li>香港迪士尼乐园分七大主题园区,他们是美国小镇大街、幻想世界、明日世界、探险世界、2011年11月开幕的反斗奇兵大本营、2012年7月开幕的灰熊山谷以及2013年5月开幕的迷离庄园。代表不同年代不同时空的迪士尼体验。</li></ul>
                    <div class="jianjie">
                      <h4>&middot;香港迪士尼乐园10周年庆典多个全新精彩演出的体验</h4>
                      <font>香港迪士尼乐园踏入10周年,整个乐园将化身成为耳目一新的华丽大舞台;全新的音乐剧“迪士尼魔法书房”、崭新的影像投影展现“星梦奇缘”烟花表演、全新座落于幻想世界的“童话园林”,以及多款精美礼品、美食和更多精彩活动,诚邀您和挚爱一起投入香港迪士尼乐园10周年庆典,缔造Happily Ever After的时光。</font></div>
                    <div class="jianjie">
                      <h4>&middot;全新百老汇式音乐剧迪士尼魔法书房</h4>
                      <font>万众期待的全新音乐剧“迪士尼魔法书房”是特别为香港而创作、乐园历年最大型的娱乐表演制作,由米奇老鼠和高飞带领宾客穿梭7个迪士尼故事,透过华丽表演与崭新舞台技术,投入一个新层次的奇妙旅程。不论音乐、编舞、服饰及舞台设计等都融入了经典及现代元素。
                        <br/>“迪士尼魔法书房”长达28分钟,将于幻想世界的迪士尼故事剧场上演,故事发生于一间魔法书房内,米奇老鼠与高飞好奇打开魔法书,因而令人见人爱的雪人小白从故事书中跌了出来。为了在小白溶化之前带他回到自己的故事,米奇老鼠、高飞及小白踏上奇妙的历险旅程,穿梭于7个迪士尼故事,包括:《小泰山》、《小鱼仙》、《魔发奇缘》、《勇敢传说之幻险森林》、《阿拉丁》、《公主与青蛙》及《魔雪奇缘》。
                        <br/>而为庆祝乐园10周年特别创作的主题歌曲《Happily Ever After》更会压轴登场,为华丽的演出带来圆满的结局。</font>
                      <div class="anli">
                        <img class="left" style="float:left;" src="img/dishini.jpg">
                        <img class="right" style="float:right" src="img/aa.jpg"></div>
                    </div>
                    <div class="jianjie">
                      <h4>&middot;全新百老汇式音乐剧迪士尼魔法书房</h4>
                      <font>万众期待的全新音乐剧“迪士尼魔法书房”是特别为香港而创作、乐园历年最大型的娱乐表演制作,由米奇老鼠和高飞带领宾客穿梭7个迪士尼故事,透过华丽表演与崭新舞台技术,投入一个新层次的奇妙旅程。不论音乐、编舞、服饰及舞台设计等都融入了经典及现代元素。
                        <br/>“迪士尼魔法书房”长达28分钟,将于幻想世界的迪士尼故事剧场上演,故事发生于一间魔法书房内,米奇老鼠与高飞好奇打开魔法书,因而令人见人爱的雪人小白从故事书中跌了出来。为了在小白溶化之前带他回到自己的故事,米奇老鼠、高飞及小白踏上奇妙的历险旅程,穿梭于7个迪士尼故事,包括:《小泰山》、《小鱼仙》、《魔发奇缘》、《勇敢传说之幻险森林》、《阿拉丁》、《公主与青蛙》及《魔雪奇缘》。
                        <br/>而为庆祝乐园10周年特别创作的主题歌曲《Happily Ever After》更会压轴登场,为华丽的演出带来圆满的结局。</font>
                      <div class="anli">
                        <img class="left" style="float:left;" src="img/dishini.jpg">
                        <img class="right" style="float:right" src="img/aa.jpg"></div>
                    </div>
                  </div>
                </div>
                <!--夺宝记录-->
                <div class="tab_show">
                  <div class="knowq"></div>
                </div>
                <!--用户晒图-->
                <div class="tab_show">
                  <div class="know">
                   	<div class="tupp" style="width:70%;margin:100px auto 50px auto;">
                    	<img src="img/dengdai.png" style="width:100%;">
                    </div>
                </div>
              </div>
            </section>
          </body>
          
          <script type="text/javascript">
          //初始化调用方法
          $(function() {
              var openId = '<%=session.getAttribute("openId")%>';
              var headimgurl = '<%=session.getAttribute("headimgurl")%>';
              var nickname = '<%=session.getAttribute("nickname")%>';
              $.ajax({
              	//请求接口获取个人购买记录,返回code开奖编码,timeStr购买时间,status是否中奖(0未开奖,1已中奖,2未中奖)
                url: "http://你的域名/weChatpay/recodeServlet?flag=1&openId=" + openId,
                type: "get",
                dataType: "json",
                success: function(data) {
                  //将开奖编码循环写到页面上
                  $.each(data,
                  function(i, list) {
                    var str = "";
                    $.each(list,
                    function(j, item) {
                      //status=1表示该编码中奖,加上中奖啦图片	
                      if (item.status == 1) {
                        str += "<div class=\"know\">" + "<div class=\"know_l\">" + "<div class=\"touxiang\"><img src=" + headimgurl + "></div><font>" + nickname + "</font></div>" + "<div class=\"know_z\"><font>" + item.code + "</font></div>" + "<div class=\"know_r\"><font id=\"riqi\">" + item.timeStr + "<div class=\"zhang\"><img src=\"img/zhongjiangla.png\"></div></font></div>" + "</div>";
                      } else {
                        str += "<div class=\"know\">" + "<div class=\"know_l\">" + "<div class=\"touxiang\"><img src=" + headimgurl + "></div><font>" + nickname + "</font></div>" + "<div class=\"know_z\"><font>" + item.code + "</font></div>" + "<div class=\"know_r\"><font id=\"riqi\">" + item.timeStr + "</font></div>" + "</div>";
    
                      }
                    });
    
                    $(".tab_show .knowq").html(str);
    
                  });
    
                }
    
              });
    
            });
          </script>
          
          <script type="text/javascript">
          //点击购买按钮调用方法
          $(".canyu").click(function() {
              //获取进度条元素
              var progress = $("progress");
              //进度条不满10人时执行下面代码,若等于10为待开奖状态,则什么也不执行
              if (progress.val() != 10) {
    
                var openId = '<%=session.getAttribute("openId")%>';
                //num购买数量,money总金额(单位分)
                var num = $(".Amount").val();
                var money = num * 100;
                //防止并发超卖,购买前先增加订单数量判断是否小于10,支付成功后再发放中奖码,若支付失败再减去相应订单数量
                $.ajax({
                  url: "http://你的域名/weChatpay/recodeServlet?flag=3&num=" + num,
                  type: "get",
                  dataType: "json",
                  success: function(data) {
                  	//error=1 增加订单后总订单数小于等于10
                    if (data.error == 1) {
                      //调用支付接口
                      $.ajax({
                        url:"http://你的域名/weChatpay/topayServlet?openId="+openId+"&money="+money,
                        type: "get",
                        dataType: "json",
                        success: function(json) {
                          WeixinJSBridge.invoke('getBrandWCPayRequest', {
                            "appId": json.appId,
                            "timeStamp": json.timeStamp,
                            "nonceStr": json.nonceStr,
                            "package": json.packages,
                            "signType": "MD5",
                            "paySign": json.sign
                          },
                          //调起微信支付成功
                          function(res) {
                            WeixinJSBridge.log(res.err_msg);
                            if (res.err_msg == "get_brand_wcpay_request:ok") {
                              //alert("微信支付成功!");
                              //跳转到生成开奖编码的servlet
                              window.location.href = "http://你的域名/weChatpay/resultServlet?openId=" + openId + "&num=" + num;
                              //	            		}else if(res.err_msg == "get_brand_wcpay_request:cancel"){  
                              //alert("用户取消支付!");  
                            } else {
                              //支付失败或取消,恢复到原来的订单量
                              $.ajax({
                                url: "http://你的域名/weChatpay/recodeServlet?flag=4&num=" + num,
                                type: "get",
                                dataType: "json"
                              });
                            }
                          });
                        },
                        //调起微信支付失败,恢复到原来的订单量
                        error:function(){
                        	$.ajax({
                                url: "http://你的域名/weChatpay/recodeServlet?flag=4&num=" + num,
                                type: "get",
                                dataType: "json"
                             });
                        }
                      });
                    //error=0 表示增加订单后总订单数大于10
                    } else {
                      alert("库存不足");
                    }
    
                  }
    
                });
    
              }
    
            });
        </script>   
        </html>
    

    4.处理支付的接口
    TopayServlet.java

    package com.servlet;
    
    import java.io.IOException;
    import java.util.SortedMap;
    import java.util.TreeMap;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import net.sf.json.JSONObject;
    import com.utils.GetWxOrderno;
    import com.utils.RequestHandler;
    import com.utils.Sha1Util;
    import com.utils.TenpayUtil;
    
    public class TopayServlet extends HttpServlet {
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		
    		request.setCharacterEncoding("UTF-8");
    		JSONObject json = new JSONObject();
    		
    		//网页授权后获取传递的参数
    		String money = request.getParameter("money");//分为单位
    		String openId = request.getParameter("openId");
    		
    		//金额转化为分为单位
    //		float sessionmoney = Float.parseFloat(money);
    //		String finalmoney = String.format("%.2f", sessionmoney);
    //		finalmoney = finalmoney.replace(".", "");
    		int intMoney = Integer.parseInt(money);
    		
    		//商户相关资料 
    		String appid = "";//公众号appid
    		String appsecret = "";//公众号秘钥
    		String partner = "";//商户号
    		String partnerkey = "";//商户API秘钥
    	
    		//用于获取随机数
    		String currTime = TenpayUtil.getCurrTime();//获取当前时间
    		String strTime = currTime.substring(8, currTime.length());//8位日期
    		String strRandom = TenpayUtil.buildRandom(4) + "";//四位随机数
    		String strReq = strTime + strRandom;//10位序列号,可以自行调整
    		
    		String orderNo=appid+Sha1Util.getTimeStamp();//随机生成了一个订单号
    				
    				//商户号
    				String mch_id = partner;
    				
    				//子商户号  非必输
    				//String sub_mch_id="";
    				
    				//设备号   非必输
    				String device_info="WEB";
    				
    				//随机数 
    				String nonce_str = strReq;
    				
    				//商品描述
    				String body = "一元夺宝";
    				
    				//附加数据
    				String attach = "xx科技有限公司";
    				
    				//商户订单号
    				String out_trade_no = orderNo;
    				
    				//总金额以分为单位,不带小数点
    				int total_fee = intMoney;
    				
    				//订单生成的机器 IP
    				String spbill_create_ip = request.getRemoteAddr();
    				
    				//订 单 生 成 时 间   非必输
    //				String time_start ="";
    				
    				//订单失效时间      非必输
    //				String time_expire = "";
    				
    				//商品标记   非必输
    //				String goods_tag = "";
    				
    				//支付完成后微信发给该链接信息,可以判断会员是否支付成功,改变订单状态等:http://*/weChatpay/notifyServlet
    				String notify_url ="http://你的域名/weChatpay/notifyServlet";
    				
    				String trade_type = "JSAPI";
    				
    				String openid = openId;
    				
    				//非必输
    //				String product_id = "";
    				
    				//获取sign(统一下单接口签名)
    				//第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),
    				//使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
    				//第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,
    				//再将得到的字符串所有字符转换为大写,得到sign值signValue。
    				SortedMap<String, String> packageParams = new TreeMap<String, String>();
    				packageParams.put("appid", appid);  
    				packageParams.put("mch_id", mch_id);  
    				packageParams.put("nonce_str", nonce_str);  
    				packageParams.put("body", body);  
    				packageParams.put("attach", attach);  
    				packageParams.put("out_trade_no", out_trade_no);  
    				packageParams.put("total_fee", money);  
    				packageParams.put("spbill_create_ip", spbill_create_ip);  
    				packageParams.put("notify_url", notify_url);  
    				packageParams.put("trade_type", trade_type);  
    				packageParams.put("openid", openid);  
    				RequestHandler reqHandler = new RequestHandler(request, response);
    				reqHandler.init(appid, appsecret, partnerkey);
    				String sign = reqHandler.createSign(packageParams);
    				
    				//统一下单接口携带参数(xml格式),接口地址https://api.mch.weixin.qq.com/pay/unifiedorder
    				String xml="<xml>"+
    						"<appid>"+appid+"</appid>"+
    						"<mch_id>"+mch_id+"</mch_id>"+
    						"<nonce_str>"+nonce_str+"</nonce_str>"+
    						"<sign>"+sign+"</sign>"+
    						"<body><![CDATA["+body+"]]></body>"+
    						"<attach>"+attach+"</attach>"+
    						"<out_trade_no>"+out_trade_no+"</out_trade_no>"+
    						//金额,这里写的1 分到时修改,测试用
    //						"<total_fee>"+1+"</total_fee>"+
    						"<total_fee>"+total_fee+"</total_fee>"+
    						"<spbill_create_ip>"+spbill_create_ip+"</spbill_create_ip>"+
    						"<notify_url>"+notify_url+"</notify_url>"+
    						"<trade_type>"+trade_type+"</trade_type>"+
    						"<openid>"+openid+"</openid>"+
    						"</xml>";
    				System.out.println(xml);
    				
    				String allParameters = "";//没用
    				try {
    					allParameters =  reqHandler.genPackage(packageParams);
    				} catch (Exception e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    				
    				//请求微信统一下单接口,成功后返回预支付交易会话标识prepay_id
    				String createOrderURL = "https://api.mch.weixin.qq.com/pay/unifiedorder";
    				String prepay_id = "";
    				try {
    					prepay_id = new GetWxOrderno().getPayNo(createOrderURL, xml);
    					if(prepay_id.equals("")){
    						request.setAttribute("ErrorMsg", "统一支付接口获取预支付订单出错");
    						response.sendRedirect("error.jsp");
    					}
    				} catch (Exception e1) {
    					// TODO Auto-generated catch block
    					e1.printStackTrace();
    				}
    				
    				//生成H5调起微信支付API相关参数(前端页面js的配置参数)
    				SortedMap<String, String> finalpackage = new TreeMap<String, String>();
    				String timestamp = Sha1Util.getTimeStamp();//当前时间的时间戳
    				String packages = "prepay_id="+prepay_id;;//订单详情扩展字符串
    				finalpackage.put("appId", appid);//公众号appid  
    				finalpackage.put("timeStamp", timestamp);  
    				finalpackage.put("nonceStr", strReq); //随机数 
    				finalpackage.put("package", packages);  
    				finalpackage.put("signType", "MD5");//签名方式
    				String finalsign = reqHandler.createSign(finalpackage);//签名
    
    				json.put("appId", appid);
    				json.put("timeStamp", timestamp);
    				json.put("nonceStr", strReq);
    				json.put("packages", packages);
    				json.put("sign", finalsign);
    				response.getWriter().append(json.toString());
    				
    				//response.sendRedirect("shop/index.jsp?appid="+appid+"&timeStamp="+timestamp+"&nonceStr="+strReq+"&package="+packages+"&sign="+finalsign);
    	}
    
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		doGet(request, response);
    	}
    
    }
    
    

    开发前最好详细阅读微信支付开发文档,理解所用接口,以及相关签名、参数等。
    代码中用的其他类以及完整demo见下面链接,demo中有需要修改参数的说明文档。
    源码链接
    链接:https://pan.baidu.com/s/1vqamVIALHecPr7fbZysMeQ
    提取码:82ye

    展开全文
  • 微信许愿墙 H5网页版,主要用JS +H5实现移动端留言墙功能,在别人的基础上对手机端使用优化了一下。
  • H5网页--泱泱大国,纯手撸HTML+CSS+JS
  • HTML5游戏源码,各个好用,非常好玩,下面小编整理了一些最近很火的微信游戏,上传到空间主机即可。 游戏有:2048、全民寻找房祖名、数钱数到手抽筋、疯狂打企鹅、暴打神经猫、切西瓜、激光战警、微信找你妹、疯狂挠...
  • html5+bootstrap网页源码,分享大家学习,Bootstrap是Twitter推出的一个用于前端开发的开源工具包。它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架。
  • H5网页实现微信分享,分享朋友圈功能,网上的代码基本上都过期了,特基于最新的jweixin-1.6.0版本的微信分享实现,以作备忘。 1.微信分享文档及配置 1.1微信分享官网文档 地址...
  • H5网页综合案例视频教程,共33集,主要内容是讲解一个包含五屏的网页综合案例效果如何使用H5+css3实现的全过程,网页每一屏展示的效果和功能都不尽相同。 第1章 1-9集视频课 h5前端综合实例开发教学第01集...
  • 利用三方融云api实现网页实时聊天 H5页面
  • h5纯js切水果游戏源码,百度js小组提供,最简洁的实现,包含各种图片资源,声音等;可在本地运行,适合新手学习
  • 微信H5支付源码示例

    2019-03-06 10:32:28
    微信H5支付源码示例
  • 用js实现网页版中国象棋游戏,可进行人机
  • uniapp中h5网页微信公众号授权

    千次阅读 2020-09-28 15:16:54
    uniapp微信网页授权uniapp中h5网页微信公众号授权主要代码获取code返回的code截取代码 uniapp中h5网页微信公众号授权 微信官方文档–>网页授权 uniapp中h5网页微信公众号授权步骤: 1.采用用户授权获取code 2.把...
  • 教你玩转HTML(html5)h5网页设计,网站开

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,915
精华内容 7,166
关键字:

h5网页源码