移动


微信充值技术方案

<h1>修改记录</h1> <table> <thead> <tr> <th>日期</th> <th>修改内容</th> <th>编辑人</th> </tr> </thead> <tbody> <tr> <td>2019.01.17</td> <td>创建文档 v1.0 <br> <a href="http://192.168.1.8:1505/【产品设计部】产品文档/01【FA】游戏线/微信小游戏/微信公众号充值" title="在线方案">在线方案</a> <br> <a href="http://192.168.1.8:1505/【产品设计部】产品文档/01【FA】游戏线/微信小游戏/微信公众号充值/微信小游戏公众号充值V1.0.0原型/#g=1&amp;p=h5银子充值" title="在线原型">在线原型</a></td> <td>大雄</td> </tr> <tr> <td>2019.01.18</td> <td>去掉商品信息表</td> <td>大雄</td> </tr> </tbody> </table> <table> <thead> <tr> <th>运营</th> <th>产品</th> <th>后端</th> <th>客户端</th> <th>前端</th> <th>测试</th> </tr> </thead> <tbody> <tr> <td>任印豪</td> <td>汪路、李青青</td> <td>周郑君</td> <td>无</td> <td>秦露</td> <td>暂无</td> </tr> </tbody> </table> <h1>1 系统整体架构设计</h1> <h2>1.1 背景</h2> <p>由于苹果政策问题微信小游戏在iOS端无法充值,为解决iOS用户充值诉求,本版本增加微信服务号银子充值功能,使双端用户均能够在微信中完成银子充值。 本版本需求可能扩展点如下: 1.多个公众号共存,每个公众号对应一款游戏 2.一个公众号对应多个游戏</p> <h2>1.2 架构设计</h2> <h3>1.2.1 系统架构图</h3> <p><img src="http://doc.uc108.org:8002/Public/Uploads/2019-01-17/5c4067f3a928d.png" alt="" /></p> <h2>1.3 关键技术</h2> <p>技术栈:netcore+mysql+rabbitmq+redis 部署环境:docker容器</p> <h1>2 数据存储设计</h1> <h2>2.1 数据库架构设计</h2> <p>1.数据库采用关系数据库mysql 2.目前业务请求量不明,采用单库单表存储</p> <h2>2.2 数据库表设计</h2> <h3><del>2.2.1 商品信息数据表</del></h3> <table> <thead> <tr> <th>序号</th> <th>字段名</th> <th>类型</th> <th>键/索引</th> <th>备注</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>ID</td> <td>int</td> <td>PK</td> <td>主键ID</td> </tr> <tr> <td>2</td> <td>Name</td> <td>varchar(32)</td> <td></td> <td>商品名称</td> </tr> <tr> <td>3</td> <td>Price</td> <td>decimal</td> <td></td> <td>单价</td> </tr> <tr> <td>4</td> <td>Alias</td> <td>varchar(32)</td> <td></td> <td>别名</td> </tr> <tr> <td>5</td> <td>PublicId</td> <td>int</td> <td></td> <td>公众号id</td> </tr> <tr> <td>6</td> <td>Num</td> <td>int</td> <td></td> <td>数量(对应虚拟物品数量)</td> </tr> <tr> <td>7</td> <td>GameCode</td> <td>varchar(8)</td> <td></td> <td>游戏缩写</td> </tr> <tr> <td>8</td> <td>GameId</td> <td>int</td> <td></td> <td>游戏id</td> </tr> <tr> <td>9</td> <td>IsDel</td> <td>bit</td> <td></td> <td>是否有效</td> </tr> </tbody> </table> <h3>2.2.2 用户基础数据表(用户对应usercode与openid的关系)</h3> <table> <thead> <tr> <th>序号</th> <th>字段名</th> <th>类型</th> <th>键/索引</th> <th>备注</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>ID</td> <td>int</td> <td>PK</td> <td>主键ID</td> </tr> <tr> <td>2</td> <td>OpenId</td> <td>varchar(32)</td> <td></td> <td>OpenId</td> </tr> <tr> <td>3</td> <td>UnionId</td> <td>varchar(32)</td> <td></td> <td>UnionId</td> </tr> <tr> <td>4</td> <td>UserCode</td> <td>varchar(32)</td> <td></td> <td>用户标识</td> </tr> <tr> <td>5</td> <td>PublicId</td> <td>int</td> <td></td> <td>公众号id</td> </tr> <tr> <td>6</td> <td>GameCode</td> <td>varchar(8)</td> <td></td> <td>游戏缩写</td> </tr> <tr> <td>7</td> <td>GameId</td> <td>int</td> <td></td> <td>游戏id</td> </tr> <tr> <td>8</td> <td>IsDel</td> <td>bit</td> <td></td> <td>是否有效</td> </tr> </tbody> </table> <h3>2.2.3 订单记录表</h3> <table> <thead> <tr> <th>序号</th> <th>字段名</th> <th>类型</th> <th>键/索引</th> <th>备注</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>ID</td> <td>int</td> <td>PK</td> <td>主键ID</td> </tr> <tr> <td>3</td> <td>UserCode</td> <td>varchar(32)</td> <td></td> <td>用户标识</td> </tr> <tr> <td>4</td> <td>PublicId</td> <td>int</td> <td></td> <td>公众号id</td> </tr> <tr> <td>5</td> <td>GameCode</td> <td>varchar(8)</td> <td></td> <td>游戏缩写</td> </tr> <tr> <td>6</td> <td>GameId</td> <td>int</td> <td></td> <td>游戏id</td> </tr> <tr> <td>7</td> <td>GameName</td> <td>varchar(16)</td> <td></td> <td>游戏名称</td> </tr> <tr> <td>8</td> <td>IsDel</td> <td>bit</td> <td></td> <td>是否有效</td> </tr> <tr> <td>9</td> <td>UserId</td> <td>int</td> <td></td> <td>用户id</td> </tr> <tr> <td>10</td> <td>NickName</td> <td>varchar(32)</td> <td></td> <td>用户昵称</td> </tr> <tr> <td>11</td> <td>AppId</td> <td>varchar(32)</td> <td></td> <td>微信公众号id</td> </tr> <tr> <td>12</td> <td>OrderNo</td> <td>varchar(32)</td> <td></td> <td>订单号</td> </tr> <tr> <td>13</td> <td>PayOrderNo</td> <td>varchar(32)</td> <td></td> <td>支付订单号(老徐)</td> </tr> <tr> <td>14</td> <td>Price</td> <td>decimal</td> <td></td> <td>单价</td> </tr> <tr> <td>15</td> <td>Num</td> <td>int</td> <td></td> <td>数量(对应虚拟物品数量)</td> </tr> <tr> <td>16</td> <td>GoodName</td> <td>varchar(32)</td> <td></td> <td>商品名称</td> </tr> <tr> <td>17</td> <td>GoodId</td> <td>int</td> <td></td> <td>商品id</td> </tr> <tr> <td>18</td> <td>OrderTimeStamp</td> <td>long</td> <td></td> <td>订单成功时间</td> </tr> <tr> <td>19</td> <td>OrderCreateTimeStamp</td> <td>long</td> <td></td> <td>订单创建时间</td> </tr> <tr> <td>20</td> <td>PayTimeStamp</td> <td>long</td> <td></td> <td>支付时间</td> </tr> <tr> <td>21</td> <td>GoodType</td> <td>int</td> <td></td> <td>物品类型</td> </tr> </tbody> </table> <h3>2.2.4 订单详情记录表</h3> <table> <thead> <tr> <th>序号</th> <th>字段名</th> <th>类型</th> <th>键/索引</th> <th>备注</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>ID</td> <td>int</td> <td>PK</td> <td>主键ID</td> </tr> <tr> <td>3</td> <td>OrderId</td> <td>int</td> <td></td> <td>订单id</td> </tr> <tr> <td>4</td> <td>Info</td> <td>text</td> <td></td> <td>订单创建结果</td> </tr> </tbody> </table> <h3>2.2.5 用户token表(过期物理删除)</h3> <table> <thead> <tr> <th>序号</th> <th>字段名</th> <th>类型</th> <th>键/索引</th> <th>备注</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>ID</td> <td>int</td> <td>PK</td> <td>主键ID</td> </tr> <tr> <td>3</td> <td>UserCode</td> <td>varchar(32)</td> <td></td> <td>用户标识</td> </tr> <tr> <td>4</td> <td>token</td> <td>varchar(1024)</td> <td></td> <td>token</td> </tr> <tr> <td>4</td> <td>TimeStamp</td> <td>long</td> <td></td> <td>有效期的截至日期</td> </tr> </tbody> </table> <h3>2.3 参数配置信息</h3> <pre><code>[{ "Id":11111,//公众号序号 "PAyClientId":"",//充值客户端id "PaySecurekey":"",//充值客户端Securekey "AppId":"",//微信appid "secret":"",//微信secret "GameAppId":"",//微信小游戏appid "GameId":"",//微信小游戏id "GameCode":"",//微信小游戏Code "GameName":"",//微信小游戏名称 }]</code></pre> <h1>3 缓存设计</h1> <h2>3.1 缓存架构设计</h2> <h3>3.1.1 参数配置缓存</h3> <p><em>key</em>:wxpaycom:config <em>缓存结构</em>:hash <em>filed</em>:{pulicId} //公众号id <em>value</em>:{pulicId,PAyClientId,PaySecurekey,AppId,secret,GameAppId,GameId,GameName,GameCode} <em>更新方式</em>:编辑配置触发更新 <em>有效期</em>:永久</p> <h3>3.1.2 用户信息缓存</h3> <p><em>key</em>:wxpayuser:UserInfo_{userid} <em>缓存结构</em>:string <em>value</em>:{userid,username,NickName,appid,gamecode,gamename} <em>有效期</em>:0.5H</p> <h3><del>3.1.3 商品信息缓存</del></h3> <p><em>key</em>:wxpaygood:good<em>{pulicId}</em>{gamCode} <em>缓存结构</em>:hash <em>filed</em>:{goodid} <em>value</em>:{ID,Price,Alias,Num} <em>更新方式</em>:人工触发(无后台) <em>有效期</em>:永久</p> <h1>4 业务流程(流程/时序图)</h1> <h2>4.1 初始页面调用流程</h2> <p><img src="http://doc.uc108.org:8002/Public/Uploads/2019-01-17/5c4063370c340.png" alt="" /></p> <h2>4.2支付流程</h2> <p><img src="http://doc.uc108.org:8002/Public/Uploads/2019-01-17/5c4066f2e0907.png" alt="" /></p> <h1>5 接口设计</h1> <p>查看<a href="http://doc.uc108.org:8002/index.php?s=/page/3636">接口文档</a> </p> <h1>6 相关技术文档</h1> <p>商城接口文档<a href="http://doc.uc108.org:8002/index.php?s=/73&amp;page_id=478">接口文档</a> </p>

页面列表

ITEM_HTML