微信开发 登陆和支付 node 版

一、微信端设置 
 

1.微信登陆认证微信端设置    设置回调页面 url(www.isongli.net) 



2.支付微信设置  

  申请开通微信支付 


 设置支付授权目录 


设置业务域名和 js 调起域名 


设置 appkey ( ) 




代码块: Routes/ wxlogin.js module.exports = {     method: 'get',     path: '{root}/ wxlogin.html',     process: function (req, res) {         res.render('wxlogin', {              title: '微信支付登录'         })     } }; 
 
order-info.js var request = require('request'); 
 
module.exports = {     method: 'get',     path: '{root}/ order-info.html',     process: function (req, res) { 
 
   var code = req.query.code;    var ordernum = req.query.ordernum;    var amount = req.query.amount;    var appID =’’;    var secret = ‘’; 
 
   var accessTokenUrlOne = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' + appID + '&secret=' + secret + '&code=' + code + '&grant_type=authorization_code'; 
 
   function getRefreshTokenUrl(refreshToken) {     return 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=' + appID + '&grant_type=refresh_token&refresh_token=' + refreshToken;    } 
 
   function getUserInfoUrl(accessToken, openID) {     return 'https://api.weixin.qq.com/sns/userinfo?access_token=' + accessToken + '&openid=' + openID;    } 
 
 
   request(accessTokenUrlOne, {timeout: 1000 * 0}, function (error, response, body1) 

{     var data1 = JSON.parse(body1);     var refreshToken = data1.refresh_token;     var accessToken1 = data1.access_token; 
 
    request(getRefreshTokenUrl(refreshToken), {timeout: 1000 * 0}, function (error, response, body2) {      var data2 = JSON.parse(body2);      var accessToken = data2.access_token;      var openID = data2.openid; 
 
     request(getUserInfoUrl(accessToken, openID), {timeout:1000 * 0}, function (error, response, body3) {       var data3 = JSON.parse(body3); 
 
      res.render('wxindex', {        body1: data1,        body2: data2,        body3: data3,        amount:amount,        ordernum:ordernum       })      });     }); 
 
   }); 
 
    } }; 
 
/pay.js var ip = require('ip'); var md5 = require('md5'); var request = require('request'); var xml = require('xml'); var select = require('xpath.js') ,dom = require('xmldom').DOMParser 
 
module.exports = {     method: 'get',     path: '{root}/wxpay/pay.html',     process: function (req, res) { 
 
 //户号         var appid =’’;         var body = '订单描述'; 
        var mch_id = '1249885301'; //商户号 
        var nonce_str='abcdABCDEFGHIJKLM123456789'; //随机字符串         var notify_url='http://www.isongli.net/notify'; //返回通知地址         var openid = req.query.openid;         var out_trade_no=req.query.ordernum;         var spbill_create_ip=ip.address();         var total_fee=req.query.amount;         var trade_type ='JSAPI'; 
 
        var appkey =’’;         var stringA = 'appid='+appid+'&body='+body+'&mch_id='+mch_id+'&nonce_str='+nonce_str+'&notify_url='+n otify_url+'&openid='+openid+'&out_trade_no='+out_trade_no+'&spbill_create_ip='+spbill_creat e_ip+'&total_fee='+total_fee+'&trade_type='+trade_type;         var stringSignTemp = stringA+'&key='+appkey;         var sign = md5(stringSignTemp); //获取预支付 ID 签名 
 
        //获取预支付 ID         var prepayXml = 'https://api.mch.weixin.qq.com/pay/unifiedorder';         var xmlStr = [{xml: [{ appid: appid },                                 { body: body },                                 { mch_id: mch_id },                                 { nonce_str: nonce_str },                                 { notify_url:notify_url },                                 { openid: openid },                                 { out_trade_no: out_trade_no },                                 { spbill_create_ip: spbill_create_ip },                                 { total_fee: total_fee },                                 { trade_type: trade_type },                                 { sign: sign }         ]}];        var allXmlStr = xml(xmlStr); 
 
        request.post({url:prepayXml, form: allXmlStr}, function(err,req,body){ 
 
            var doc = new dom().parseFromString(body);             var nodes = select(doc, "//prepay_id");             var timeStamp = new Date().getTime().toString();             var nonceStr = nonce_str;             var prepay_id = nodes[0].firstChild.data; 

 var package = 'prepay_id='+prepay_id;             var signType = 'MD5';             var stringB = 'appId=' + appid +                             '&nonceStr=' + nonceStr +                             '&package=' + package +                             '&signType=' + signType+                             '&timeStamp=' + timeStamp;  
 
            var stringSignTempPay = stringB+'&key='+appkey;             var paySign = md5(stringSignTempPay); 
 
            console.log('body:'+body);             console.log('stringB:'+stringB);             console.log('paySign:'+paySign);        var sn = md5(out_trade_no+total_fee+'iwean'); 
 
            res.setHeader("Set-Cookie",["openid="+openid]);             res.render('wxpay', {                 title: '微信支付',                 orderNum:out_trade_no,                 amount:total_fee,     sn:sn,                 appId:appid,                 timeStamp:timeStamp,                 nonceStr:nonceStr,                 package:package,                 signType:signType,                 paySign:paySign             }) 
 
        }) 
 
    } }; 
 
views/ wxlogin.html <!DOCTYPE html> <html> <head>  ….. </head> <body class="dowpagebg"> 

<div class="dowpage" style="padding:30px;">     <h2>微信登录</h2>     <br/>     <a href="javascript:;" class="butLogin">微信一键登陆</a> </div> 
 
</body> //JS 库 <script src="zepot.js or jquery.js"></script> <script>    var url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx7e6f3745dcc331bc&redirect_ uri='+encodeURIComponent('http://www.iwifitech.com/wxindex.html')+'&response_type=code& scope=snsapi_userinfo&state=state#wechat_redirect';     console.log(url);     $('.butLogin').click(function () {        window.location.href = url;     });</script> </html> 
 
 
 
order-info.html 
 
<!DOCTYPE html> <html> <head>  ….. </head> <body class="dowpagebg"> <div class="dowpage" style="padding:30px;">     <br/>     <input type="number" value="" id="amount" placeholder="请输入金额..."/>     <br/><br/> <a href="#" class=”wxpay_btn” >微信登陆</a> </div> </body> //JS 库 <script src="zepot.js or jquery.js"></script> <script>  $(‘. wxpay’). click(function(){ var amount = $(‘# amount’).val(); var openid = '<%-body3.openid%>'; var ordernum = new Date().getTime(); //订单 Id 后台传过来,临时测试可能  

 var url =  '/wxpay/pay.html?openid='+openid+'&ordernum='+ordernum+'&amount='+amount;      window.location.href = url; }); 
 
</script> </html> 
 
 
 
 
pay.html 
 
<!DOCTYPE html> <html> <head>  ….. </head> <body class="dowpagebg"> <div class="header">微信支付</div>   <div class="member_login">    <div class="forminfo" style="font-size:0.8rem; color:#666;">     <br/><br/><br/><br/>     <h2 style="font-size:1rem; color:#333;">支付订单信息</h2><br/>     订单号:<%- orderNum %><br/><br/>     支付金额:<%- amount %><br/><br/><br/>     <a href="javascript:;" οnclick="wxPay()" class="subbtn">立即支付</a>    </div>  </div> </body> //JS 库 <script src="zepot.js or jquery.js"></script> <script>  function wxPay(){   var sn = '<%-sn%>';   //md5 加密   var amount = '<%-amount%>'; //支付金额   var orderNum = '<%-orderNum%>';  //支付订单号      var backUrl = '支付成功返回地 址?sn='+sn+'&amount='+amount+'&out_trade_no='+orderNum+'&success=';    //返回 2 成功, 1 取消,0 支付失败 

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") {                 alert("微信支付成功!");     window.location.href = backUrl+2;             } else if (res.err_msg == "get_brand_wcpay_request:cancel") {                 alert("用户取消支付!");     window.location.href = backUrl+1;             } else {                 alert("支付失败!" + res.err_msg);     window.location.href = backUrl+0;             }         }); } 
 
</script> </html> 



附上代码图片


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lrz136

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值