在themes/js/libs/questiondetails.js中,旁观者用户点击语音后进入identityService.saveUserToPayMent接口。首先声明一个charge对象,当price大于0时,拿到服务器IP地址,
定义一个map charge,在charge中放入order_no为orderid,orderid为一个随机字符串;amount为订单金额price(此处的amount单位为分,所以这里要乘100);channel为支付渠道(ping++文档中详细解释);currency中放的是支付币种(ping++文档中详细记载);client_ip放入ip(主机地址);subject和body中存放的是title和description(这两个可以根据需要改变);调用接口PPPPayMent.charge(onlineuser.getOpenid(),charge)
此处填写API key和应用id
Pingpp.apiKey=apiKey;(pingpp 管理平台对应的API key)
Charge resultCharge =null;
app.put("id",appId);(pingpp 管理平台对应的应用ID)
chargeMap.put("app",app);
判断付款方式(此处为扫码登录)
String channelType = chargeParam.getChannel();
if(UtilDataDic.PAY_CHANNEL_WX_PUB_QR.equals(channelType)){
Map<String, Object> extra = new HashMap<String, Object>();
extra.put("product_id",chargeParam.getObject());
chargeMap.put("extra",extra);
}
将以上数据作为参数,resultCharge = Charge.create(chargeMap);
当前端传入role为0时,说明该操作室偷听。若price大于零,则说明该用户身价或者偷听价格不为零,之后判断charges是否为空,则说明charges创建成功。payment表中插入一条支付数据。若price为0,则表明该问答为免费偷听。
若为2说明该操作为提问。则表明现在用户是提问者,若price大于零,则说明该用户身价或者偷听价格不为零,向live表中插入一条数据。若price为0,则表明被提问者身价为0,向payment和live表中添加数据。
处理完数据后接口返回charges以供前端使用。
前端调用框架时,会经过ping++平台请求通过web-xml进入WebHooksServlet
<servlet-mapping>
<servlet-name>pingxxCharge</servlet-name>
<url-pattern>/pingxxCharge</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>pingxxCharge</servlet-name>
<servlet-class>com.sas.pdg.mrr.servlet.WebHooksServlet</servlet-class>
</servlet>
用来检测支付状态。首先获取http请求中body中内容,再通过解析异步数据,获取event类型。
charge.succeeded为支付成功,判断eventData.get("paid").toString())是否为null,若不为null,根据orderid(eventData.get("id"))查询payment表中是否存在支付信息,若发现支付信息,则更改支付状态。之后判断该条支付信息的type是否为1,若为1说明该条支付信息是提问,更新用户提问数,并更改live表中对应提问的deleted值,表明支付成功,触发触发器,开启定时任务。
refund.succeeded为退款成功,判断eventData.get("succeed")是否为空,若不为空则读取gbtags.properties配置文件(为读取模板消息模板),调用is接口通过orderid(eventData.get("id"))在payment表中查询支付信息,若查到的支付信息不为空,则更改支付状态,更改成功后发送模板消息。
transfer.succeeded为转账成功,更改数据库信息,并发送模板消息。
注意:上述三种操作,若在response中放200信息码表示服务器正常处理了请求;若操作失败,则在response中放入500信息码,表示服务器出错。