From 4597d6fe353c603c9f37f8c5a02ae68f90f8fc81 Mon Sep 17 00:00:00 2001 From: jeremygan2021 Date: Wed, 28 Jan 2026 22:54:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ayment Flow and Registration Management.md | 37 ++ __pycache__/main.cpython-312.pyc | Bin 62991 -> 72243 bytes config.json | 53 +- docker_deply.sh | 41 +- main.py | 230 ++++++++- static/cert/apiclient_cert.p12 | Bin 0 -> 2766 bytes static/cert/apiclient_cert.pem | 25 + static/cert/apiclient_key.pem | 28 ++ static/js/qrcode.min.js | 1 + templates/admin.html | 453 +++++++++++------- templates/success.html | 104 ++++ templates/ticket.html | 197 ++++++-- 12 files changed, 914 insertions(+), 255 deletions(-) create mode 100644 .trae/documents/Optimize Payment Flow and Registration Management.md create mode 100644 static/cert/apiclient_cert.p12 create mode 100644 static/cert/apiclient_cert.pem create mode 100644 static/cert/apiclient_key.pem create mode 100644 static/js/qrcode.min.js create mode 100644 templates/success.html diff --git a/.trae/documents/Optimize Payment Flow and Registration Management.md b/.trae/documents/Optimize Payment Flow and Registration Management.md new file mode 100644 index 0000000..1303b2c --- /dev/null +++ b/.trae/documents/Optimize Payment Flow and Registration Management.md @@ -0,0 +1,37 @@ +I will optimize the registration and payment flow with the specific requirement to record the actual payment amount. + +### 1. Backend Updates (`main.py`) +- **Database Schema**: Add `out_trade_no` column to `gsdh_data` to link users with payment orders. +- **Pre-payment Validation**: + - Update `create_payment` (H5) and `create_native_payment`. + - Check if phone exists in `gsdh_data`. + - **Logic**: + - If `fee` has a valid amount (not empty, '0', or 'PENDING'), reject as "Already Registered". + - If `fee` is empty/PENDING, allow payment. + - Upsert user with `fee` = 'PENDING' and `payment_channel` = '..._pending'. +- **Payment Status Sync**: + - Update `check_payment_status`: + - When WeChat returns `SUCCESS`: + - **Update `fee`** to the actual configured payment amount (e.g., "0.01"). + - Update `payment_channel` to the final channel (removing '_pending'). + - Update `out_trade_no` logic to ensure we find the correct user. + +### 2. Frontend Optimization (`templates/ticket.html`) +- **Dynamic Form Fields**: + - Replace hardcoded inputs with a loop that renders fields based on `config.field_config` (managed in Admin). + - Respect "Show", "Required", and "Label" settings. +- **QR Code Modal**: + - Add explicit text: "请使用微信扫一扫完成支付" (Please use WeChat Scan to pay). + - Optimize layout. +- **Payment Logic**: + - Handle "Already Registered" error. + - Redirect to Success Page on completion. + +### 3. New Success Page +- Create `templates/success.html` to show a "Registration Successful" message. +- Add route in `main.py`. + +### 4. Admin Interface +- Verify `templates/admin.html` field configuration works with the new `ticket.html` dynamic rendering. + +This ensures that successful payments overwrite the 'PENDING' status with the actual amount paid. \ No newline at end of file diff --git a/__pycache__/main.cpython-312.pyc b/__pycache__/main.cpython-312.pyc index 664b0f1f0543754a236985835cb68e39ab437499..d272258ef279c306b179e59730a1ea027544fe13 100644 GIT binary patch delta 17213 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 VIs8S+Y!TH@c)ID<11viCe*i)8AqxNi delta 10845 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 f=this.data.charCodeAt(d);f>65536?(b[0]=240|(1835008&f)>>>18,b[1]=128|(258048&f)>>>12,b[2]=128|(4032&f)>>>6,b[3]=128|63&f):f>2048?(b[0]=224|(61440&f)>>>12,b[1]=128|(4032&f)>>>6,b[2]=128|63&f):f>128?(b[0]=192|(1984&f)>>>6,b[1]=128|63&f):b[0]=f,this.parsedData=this.parsedData.concat(b)}this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function b(a,b){this.typeNumber=a,this.errorCorrectLevel=b,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}function i(a,b){if(void 0==a.length)throw new Error(a.length+"/"+b);for(var c=0;c=f;f++){var h=0;switch(b){case d.L:h=l[f][0];break;case d.M:h=l[f][1];break;case d.Q:h=l[f][2];break;case d.H:h=l[f][3]}if(h>=e)break;c++}if(c>l.length)throw new Error("Too long data");return c}function s(a){var b=encodeURI(a).toString().replace(/\%[0-9a-fA-F]{2}/g,"a");return b.length+(b.length!=a?3:0)}a.prototype={getLength:function(){return this.parsedData.length},write:function(a){for(var b=0,c=this.parsedData.length;c>b;b++)a.put(this.parsedData[b],8)}},b.prototype={addData:function(b){var c=new a(b);this.dataList.push(c),this.dataCache=null},isDark:function(a,b){if(0>a||this.moduleCount<=a||0>b||this.moduleCount<=b)throw new Error(a+","+b);return this.modules[a][b]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var d=0;d=7&&this.setupTypeNumber(a),null==this.dataCache&&(this.dataCache=b.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,b){for(var c=-1;7>=c;c++)if(!(-1>=a+c||this.moduleCount<=a+c))for(var d=-1;7>=d;d++)-1>=b+d||this.moduleCount<=b+d||(this.modules[a+c][b+d]=c>=0&&6>=c&&(0==d||6==d)||d>=0&&6>=d&&(0==c||6==c)||c>=2&&4>=c&&d>=2&&4>=d?!0:!1)},getBestMaskPattern:function(){for(var a=0,b=0,c=0;8>c;c++){this.makeImpl(!0,c);var d=f.getLostPoint(this);(0==c||a>d)&&(a=d,b=c)}return b},createMovieClip:function(a,b,c){var d=a.createEmptyMovieClip(b,c),e=1;this.make();for(var f=0;f=g;g++)for(var h=-2;2>=h;h++)this.modules[d+g][e+h]=-2==g||2==g||-2==h||2==h||0==g&&0==h?!0:!1}},setupTypeNumber:function(a){for(var b=f.getBCHTypeNumber(this.typeNumber),c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[Math.floor(c/3)][c%3+this.moduleCount-8-3]=d}for(var c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[c%3+this.moduleCount-8-3][Math.floor(c/3)]=d}},setupTypeInfo:function(a,b){for(var c=this.errorCorrectLevel<<3|b,d=f.getBCHTypeInfo(c),e=0;15>e;e++){var g=!a&&1==(1&d>>e);6>e?this.modules[e][8]=g:8>e?this.modules[e+1][8]=g:this.modules[this.moduleCount-15+e][8]=g}for(var e=0;15>e;e++){var g=!a&&1==(1&d>>e);8>e?this.modules[8][this.moduleCount-e-1]=g:9>e?this.modules[8][15-e-1+1]=g:this.modules[8][15-e-1]=g}this.modules[this.moduleCount-8][8]=!a},mapData:function(a,b){for(var c=-1,d=this.moduleCount-1,e=7,g=0,h=this.moduleCount-1;h>0;h-=2)for(6==h&&h--;;){for(var i=0;2>i;i++)if(null==this.modules[d][h-i]){var j=!1;g>>e));var k=f.getMask(b,d,h-i);k&&(j=!j),this.modules[d][h-i]=j,e--,-1==e&&(g++,e=7)}if(d+=c,0>d||this.moduleCount<=d){d-=c,c=-c;break}}}},b.PAD0=236,b.PAD1=17,b.createData=function(a,c,d){for(var e=j.getRSBlocks(a,c),g=new k,h=0;h8*l)throw new Error("code length overflow. ("+g.getLengthInBits()+">"+8*l+")");for(g.getLengthInBits()+4<=8*l&&g.put(0,4);0!=g.getLengthInBits()%8;)g.putBit(!1);for(;;){if(g.getLengthInBits()>=8*l)break;if(g.put(b.PAD0,8),g.getLengthInBits()>=8*l)break;g.put(b.PAD1,8)}return b.createBytes(g,e)},b.createBytes=function(a,b){for(var c=0,d=0,e=0,g=new Array(b.length),h=new Array(b.length),j=0;j=0?p.get(q):0}}for(var r=0,m=0;mm;m++)for(var j=0;jm;m++)for(var j=0;j=0;)b^=f.G15<=0;)b^=f.G18<>>=1;return b},getPatternPosition:function(a){return f.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,b,c){switch(a){case e.PATTERN000:return 0==(b+c)%2;case e.PATTERN001:return 0==b%2;case e.PATTERN010:return 0==c%3;case e.PATTERN011:return 0==(b+c)%3;case e.PATTERN100:return 0==(Math.floor(b/2)+Math.floor(c/3))%2;case e.PATTERN101:return 0==b*c%2+b*c%3;case e.PATTERN110:return 0==(b*c%2+b*c%3)%2;case e.PATTERN111:return 0==(b*c%3+(b+c)%2)%2;default:throw new Error("bad maskPattern:"+a)}},getErrorCorrectPolynomial:function(a){for(var b=new i([1],0),c=0;a>c;c++)b=b.multiply(new i([1,g.gexp(c)],0));return b},getLengthInBits:function(a,b){if(b>=1&&10>b)switch(a){case c.MODE_NUMBER:return 10;case c.MODE_ALPHA_NUM:return 9;case c.MODE_8BIT_BYTE:return 8;case c.MODE_KANJI:return 8;default:throw new Error("mode:"+a)}else if(27>b)switch(a){case c.MODE_NUMBER:return 12;case c.MODE_ALPHA_NUM:return 11;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 10;default:throw new Error("mode:"+a)}else{if(!(41>b))throw new Error("type:"+b);switch(a){case c.MODE_NUMBER:return 14;case c.MODE_ALPHA_NUM:return 13;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 12;default:throw new Error("mode:"+a)}}},getLostPoint:function(a){for(var b=a.getModuleCount(),c=0,d=0;b>d;d++)for(var e=0;b>e;e++){for(var f=0,g=a.isDark(d,e),h=-1;1>=h;h++)if(!(0>d+h||d+h>=b))for(var i=-1;1>=i;i++)0>e+i||e+i>=b||(0!=h||0!=i)&&g==a.isDark(d+h,e+i)&&f++;f>5&&(c+=3+f-5)}for(var d=0;b-1>d;d++)for(var e=0;b-1>e;e++){var j=0;a.isDark(d,e)&&j++,a.isDark(d+1,e)&&j++,a.isDark(d,e+1)&&j++,a.isDark(d+1,e+1)&&j++,(0==j||4==j)&&(c+=3)}for(var d=0;b>d;d++)for(var e=0;b-6>e;e++)a.isDark(d,e)&&!a.isDark(d,e+1)&&a.isDark(d,e+2)&&a.isDark(d,e+3)&&a.isDark(d,e+4)&&!a.isDark(d,e+5)&&a.isDark(d,e+6)&&(c+=40);for(var e=0;b>e;e++)for(var d=0;b-6>d;d++)a.isDark(d,e)&&!a.isDark(d+1,e)&&a.isDark(d+2,e)&&a.isDark(d+3,e)&&a.isDark(d+4,e)&&!a.isDark(d+5,e)&&a.isDark(d+6,e)&&(c+=40);for(var k=0,e=0;b>e;e++)for(var d=0;b>d;d++)a.isDark(d,e)&&k++;var l=Math.abs(100*k/b/b-50)/5;return c+=10*l}},g={glog:function(a){if(1>a)throw new Error("glog("+a+")");return g.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;a>=256;)a-=255;return g.EXP_TABLE[a]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},h=0;8>h;h++)g.EXP_TABLE[h]=1<h;h++)g.EXP_TABLE[h]=g.EXP_TABLE[h-4]^g.EXP_TABLE[h-5]^g.EXP_TABLE[h-6]^g.EXP_TABLE[h-8];for(var h=0;255>h;h++)g.LOG_TABLE[g.EXP_TABLE[h]]=h;i.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var b=new Array(this.getLength()+a.getLength()-1),c=0;cf;f++)for(var g=c[3*f+0],h=c[3*f+1],i=c[3*f+2],k=0;g>k;k++)e.push(new j(h,i));return e},j.getRsBlockTable=function(a,b){switch(b){case d.L:return j.RS_BLOCK_TABLE[4*(a-1)+0];case d.M:return j.RS_BLOCK_TABLE[4*(a-1)+1];case d.Q:return j.RS_BLOCK_TABLE[4*(a-1)+2];case d.H:return j.RS_BLOCK_TABLE[4*(a-1)+3];default:return void 0}},k.prototype={get:function(a){var b=Math.floor(a/8);return 1==(1&this.buffer[b]>>>7-a%8)},put:function(a,b){for(var c=0;b>c;c++)this.putBit(1==(1&a>>>b-c-1))},getLengthInBits:function(){return this.length},putBit:function(a){var b=Math.floor(this.length/8);this.buffer.length<=b&&this.buffer.push(0),a&&(this.buffer[b]|=128>>>this.length%8),this.length++}};var l=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]],o=function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){function g(a,b){var c=document.createElementNS("http://www.w3.org/2000/svg",a);for(var d in b)b.hasOwnProperty(d)&&c.setAttribute(d,b[d]);return c}var b=this._htOption,c=this._el,d=a.getModuleCount();Math.floor(b.width/d),Math.floor(b.height/d),this.clear();var h=g("svg",{viewBox:"0 0 "+String(d)+" "+String(d),width:"100%",height:"100%",fill:b.colorLight});h.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),c.appendChild(h),h.appendChild(g("rect",{fill:b.colorDark,width:"1",height:"1",id:"template"}));for(var i=0;d>i;i++)for(var j=0;d>j;j++)if(a.isDark(i,j)){var k=g("use",{x:String(i),y:String(j)});k.setAttributeNS("http://www.w3.org/1999/xlink","href","#template"),h.appendChild(k)}},a.prototype.clear=function(){for(;this._el.hasChildNodes();)this._el.removeChild(this._el.lastChild)},a}(),p="svg"===document.documentElement.tagName.toLowerCase(),q=p?o:m()?function(){function a(){this._elImage.src=this._elCanvas.toDataURL("image/png"),this._elImage.style.display="block",this._elCanvas.style.display="none"}function d(a,b){var c=this;if(c._fFail=b,c._fSuccess=a,null===c._bSupportDataURI){var d=document.createElement("img"),e=function(){c._bSupportDataURI=!1,c._fFail&&_fFail.call(c)},f=function(){c._bSupportDataURI=!0,c._fSuccess&&c._fSuccess.call(c)};return d.onabort=e,d.onerror=e,d.onload=f,d.src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==",void 0}c._bSupportDataURI===!0&&c._fSuccess?c._fSuccess.call(c):c._bSupportDataURI===!1&&c._fFail&&c._fFail.call(c)}if(this._android&&this._android<=2.1){var b=1/window.devicePixelRatio,c=CanvasRenderingContext2D.prototype.drawImage;CanvasRenderingContext2D.prototype.drawImage=function(a,d,e,f,g,h,i,j){if("nodeName"in a&&/img/i.test(a.nodeName))for(var l=arguments.length-1;l>=1;l--)arguments[l]=arguments[l]*b;else"undefined"==typeof j&&(arguments[1]*=b,arguments[2]*=b,arguments[3]*=b,arguments[4]*=b);c.apply(this,arguments)}}var e=function(a,b){this._bIsPainted=!1,this._android=n(),this._htOption=b,this._elCanvas=document.createElement("canvas"),this._elCanvas.width=b.width,this._elCanvas.height=b.height,a.appendChild(this._elCanvas),this._el=a,this._oContext=this._elCanvas.getContext("2d"),this._bIsPainted=!1,this._elImage=document.createElement("img"),this._elImage.style.display="none",this._el.appendChild(this._elImage),this._bSupportDataURI=null};return e.prototype.draw=function(a){var b=this._elImage,c=this._oContext,d=this._htOption,e=a.getModuleCount(),f=d.width/e,g=d.height/e,h=Math.round(f),i=Math.round(g);b.style.display="none",this.clear();for(var j=0;e>j;j++)for(var k=0;e>k;k++){var l=a.isDark(j,k),m=k*f,n=j*g;c.strokeStyle=l?d.colorDark:d.colorLight,c.lineWidth=1,c.fillStyle=l?d.colorDark:d.colorLight,c.fillRect(m,n,f,g),c.strokeRect(Math.floor(m)+.5,Math.floor(n)+.5,h,i),c.strokeRect(Math.ceil(m)-.5,Math.ceil(n)-.5,h,i)}this._bIsPainted=!0},e.prototype.makeImage=function(){this._bIsPainted&&d.call(this,a)},e.prototype.isPainted=function(){return this._bIsPainted},e.prototype.clear=function(){this._oContext.clearRect(0,0,this._elCanvas.width,this._elCanvas.height),this._bIsPainted=!1},e.prototype.round=function(a){return a?Math.floor(1e3*a)/1e3:a},e}():function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){for(var b=this._htOption,c=this._el,d=a.getModuleCount(),e=Math.floor(b.width/d),f=Math.floor(b.height/d),g=[''],h=0;d>h;h++){g.push("");for(var i=0;d>i;i++)g.push('');g.push("")}g.push("
"),c.innerHTML=g.join("");var j=c.childNodes[0],k=(b.width-j.offsetWidth)/2,l=(b.height-j.offsetHeight)/2;k>0&&l>0&&(j.style.margin=l+"px "+k+"px")},a.prototype.clear=function(){this._el.innerHTML=""},a}();QRCode=function(a,b){if(this._htOption={width:256,height:256,typeNumber:4,colorDark:"#000000",colorLight:"#ffffff",correctLevel:d.H},"string"==typeof b&&(b={text:b}),b)for(var c in b)this._htOption[c]=b[c];"string"==typeof a&&(a=document.getElementById(a)),this._android=n(),this._el=a,this._oQRCode=null,this._oDrawing=new q(this._el,this._htOption),this._htOption.text&&this.makeCode(this._htOption.text)},QRCode.prototype.makeCode=function(a){this._oQRCode=new b(r(a,this._htOption.correctLevel),this._htOption.correctLevel),this._oQRCode.addData(a),this._oQRCode.make(),this._el.title=a,this._oDrawing.draw(this._oQRCode),this.makeImage()},QRCode.prototype.makeImage=function(){"function"==typeof this._oDrawing.makeImage&&(!this._android||this._android>=3)&&this._oDrawing.makeImage()},QRCode.prototype.clear=function(){this._oDrawing.clear()},QRCode.CorrectLevel=d}(); \ No newline at end of file diff --git a/templates/admin.html b/templates/admin.html index 5dc8ab5..a5e420e 100644 --- a/templates/admin.html +++ b/templates/admin.html @@ -73,6 +73,41 @@ font-size: 1.2rem; border-bottom: 1px solid rgba(255, 255, 255, 0.1); padding-bottom: 10px; + cursor: pointer; + display: flex; + justify-content: space-between; + align-items: center; + user-select: none; + } + + h2::after { + content: '▼'; + font-size: 0.8em; + transition: transform 0.3s; + opacity: 0.7; + } + + .card.collapsed h2::after { + transform: rotate(-90deg); + } + + .card.collapsed h2 { + border-bottom: none; + margin-bottom: 0; + } + + .card-content { + transition: all 0.3s ease-in-out; + max-height: 3000px; /* Ensure enough height for content */ + opacity: 1; + overflow: hidden; + } + + .card.collapsed .card-content { + max-height: 0; + opacity: 0; + margin: 0; + padding: 0; } .form-group { @@ -297,219 +332,259 @@

基本信息设置

-
- - -
-
- - -
-
- - -
-
- - -
-
- - +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
-
+