const express = require('express'), app = express(), bodyParser = require('body-parser'), axios = require('axios'), tenpay = require('tenpay'), qr = require('qr-image'), qs = require('querystring'), imger = require('./src/image/imageCaptcha'), phoneer = require('./src/phone/phoneCaptcha'), email = require('./src/email/emailCaptcha'), sqldata = require('./src/session/sqler'), SMSClient = require('@alicloud/sms-sdk'), emailer = new email(), getphone = new phoneer(), generate = new imger(), session = require('express-session'), accessKeyId = 'LTAI1axR0bfBECLK', secretAccessKey = 'i4BARcxzLumd4SV2VeSero6VigEAqT', smsClient = new SMSClient({accessKeyId, secretAccessKey}) // app.use('/', express.static(__dirname + '/test')) app.use(session({ secret: 'captcha', cookie: { maxAge: 300000 }, saveUninitialized: true, resave: true, name: 'verificationcode' })) app.use(bodyParser.urlencoded({extended:false})) /** * 跨域解决方案 * */ app.all('*', (req, res, next) => { res.header("Access-Control-Allow-Origin", req.headers.origin); //设置来源 res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS"); res.header("Access-Control-Max-Age", "604800000"); res.header("Access-Control-Allow-Credentials", true); res.header("X-Powered-By", ' 3.2.1'); // res.header("Content-Type", "application/json;charset=utf-8"); next(); }); /** *@effect 获取图形验证码 *return Object newimg(图像的路径) */ app.get('/getImage', (req, res) => { let svgimg = generate.captcha(4, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 2, true) req.session.imgtext = svgimg.text res.status(201).send({ svg: svgimg.data }) }) app.get('/notify', async (req, res) => { res.send(req.body) }) /** *@effect 验证图形验证码 *return object status (true/false) */ app.post('/postImagetext', (req, res) => { if(req.session.imgtext){ if(req.session.imgtext == req.body.imgtexter){ res.status(201).send() }else{ res.status(202).send({ err: '验证码错误' }) } }else{ res.status(203).send({ err: '未获取验证码' }) } }) /** * @effect 获取手机验证码 * */ app.post('/postPhone', (req, res) => { let userphone = req.body.userphone getphone.set(userphone, req, res, (data) => { req.session.phonetext = data.obj if(data.code == 200){ res.status(201).send() }else{ res.status(202).send({ err: '服务器出错' }) } }) }) /** * @effect 验证手机验证码 * */ app.post('/postphonetext', (req, res) => { if (req.session.phonetext){ if (req.session.phonetext != req.body.userphonetext) { res.status(202).send({ err: '验证码错误' }) }else{ res.status(201).send() } }else{ res.status(203).send({ err: '未获取验证码' }) } }) /** * @effect 发送邮箱验证码 * */ app.post('/postemail', (req, res) => { let useremail = req.body.useremail emailer.main(useremail, (info, statu) => { if (statu) { req.session.emailtext = info res.status(201).send() } else { res.status(202).send({ err: info }) } }) }) /** * @effect 验证邮箱验证码 * */ app.post('/postemailtext', (req, res) => { if(req.session.emailtext){ if(req.session.emailtext != req.body.useremailtext){ res.status(202).send({ err: '验证码错误' }) }else{ res.status(201).send() } }else{ res.status(203).send({ err: '未获取验证码' }) } }) /** * @effect session验证 */ app.post('/postsession', (req, res) => { let cc = new sqldata (req.body.host, req.body.user, req.body.password, req.body.database, req.body.port, req.body.table, req.body.username, req.body.userpassword) cc.db((data,onlineusername)=>{ if(data["1"] != 1){ res.session.online = true res.session.onlineusername = onlineusername res.send({ status: false }) }else{ res.send({ status: true }) } }) }) app.get('/getsessiontext', (req, res) => { if(req.session.online && req.session.onlineusername){ if(req.session.onlineusername == req.body.onlineusername){ res.send({ status: true }) }else{ res.send({ status: false }) } }else{ res.send({ status: false }) } }) app.post('/postnumber', async (req, res) => { if (/^1[3|4|5|8][0-9]\d{4,8}$/.test(req.body.number)) { if (req.session.code) { res.status(202).send({ err: '不要多次发送消息噢' }) } else { let code = Math.floor(Math.random() * 99999) req.session.code = code try{ let data = await main(req.body.number, code) if (data.Code === 'OK') { res.status(201).send({ code: 'ok' }) } else { res.status(202).send({ err: '服务器繁忙,请重新再试' }) } } catch (e) { if (e.code == "isv.BUSINESS_LIMIT_CONTROL") { res.status(202).send({ err: '你号码已经限流,请稍后再试' }) } } } } else { res.status(202).send({ err: '请检查手机格式是否正确' }) } }) app.post('/verifi', (req, res) => { if (req.session.code) { if (req.body.code == req.session.code) { res.status(201).send({ code: 'ok' }) } else { res.status(202).send({ err: '验证码错误' }) } }else { res.status(202).send({ err: '还没发送验证码噢' }) } }) const config = { appid: 'wxb558057b16b95dd5', mchid: '1391101602', partnerKey: 'WLfN6xZt60JL2Pj1HFb72VA48IPofN3n', notify_url: 'http://api.cloudsql.1473.cn/wechatredirect', } const payconfig = { appid: 'wxb558057b16b95dd5', redirect_uri: 'http://api.cloudsql.1473.cn/wechatredirect', response_type: 'code', scope: 'snsapi_base', state: 'test' } const api = new tenpay(config); const pay = async (msg, req) => { let ordersid = Date.now().toString() req.session.ordersid = ordersid let result = await api.unifiedOrder({ out_trade_no: req.session.ordersid, body: '商品简单描述', total_fee: 1, openid: msg }); return result } const buildSign = (json) => { return 'http://weixin.1473.cn/index/index.html?' + qs.stringify(json) + '#wechat_redirect' } app.get('/wechatredirect', async (req, res) => { req.session.erre = '123' console.log(req.session.erre) try { if (req.query.code) { let code = await axios.get('https://api.weixin.qq.com/sns/oauth2/access_token?appid=wxb558057b16b95dd5&secret=46237a17fbc57f5ebc5cc93c2b8cc505&code=' + req.query.code + '&grant_type=authorization_code') let orders = await pay(code.data.openid, req) let result = await api.getPayParamsByPrepay({ prepay_id: orders.prepay_id }); req.session.prepay = result res.redirect('/pay') } else { res.send('服务器出错,请重新发送请求') } } catch (e) { res.send(e) } }) app.get('/getorders', (req, res) => { res.send(req.session.prepay) }) app.get('/pay', async (req, res) => { console.log(req.session.erre) res.sendFile(__dirname + '/wechatpay/index.html'); }) app.post('/selectorders', async (req, res) => { console.log(req.session.erre) let result = await api.orderQuery({ out_trade_no: ordersid }); res.send(result) }) app.get('/getqr', async (req, res) => { let msg = req.query if (msg) { let qrurl = await buildSign(payconfig) let code = await qr.image(qrurl, {size : 50}) code.pipe(res) } else { res.send('请传入正确的参数') } }) app.get('/orderquery', async (req, res) => { let result = await api.orderQuery({ out_trade_no: req.query.older }); }) const main = async (number, code) => { let data = await smsClient.sendSMS({ PhoneNumbers: number, SignName: '阿里云短信测试专用', TemplateCode: 'SMS_133180335', TemplateParam: '{"code":"' + code + '"}' }) return data } app.listen('9000', () => { console.log('service listing port 9000') })