微信小程序开发我遇到的一些坑和建议智能客服的实现提醒的实现,支付实

来源:未知 浏览 104次 时间 2021-06-10 03:56

小程序最近火了所以我也花点时间研究了下同时自己也练练手做了一个小程序“商务工作记事册”网站排名同时自己也练练手做了一个小程序“商务工作记事册”在微信小程序里可以被搜索到接下去我讲讲我开发过程中遇到的一些坑吧主要针对后台。

主要功能:

支付接口调测:点击支持我们可以直接捐赠;

提醒功能:主要使用客服通知以及微信小卡片通知;

自定义账本字段:主要就各种Event的Tag可以扩展字段;

文件上传下载:支持事件上传图片录音文件;

首先要做到上面这些后台必须要从小程序平台得到的信息如下图:

准备工作就绪讲讲我开发这个小程序遇到的一些问题以及相应实现吧

 

前端问题

高度不能用rpx不然无法计算以及自适应所以我后来改成了px不知道有没有更好的方案;

首页应该要验证token合法性要去服务器请求验证这个过程是异步的所以在载入首页之前应该有个splash过渡窗口引导不然进入首页token非法的就将无法请求到数据不知道有没有更好的方案;

排版布局使用的是weui不知道还有没有更好的wxss可以使用;

由于异步调用多会乱所以后来引入的Promise好很多;

 

后台问题

支付实现; 
支付微信为了安全性增加了数字签名首先你要发起一个订单得到订单号有了这个订单号就可以启动微信支付功能了以下是代码:

 

public JSONObject prePay() throws Exception{

UserBean ub = getWxUser();

if(ub!=null){

String appid = (StrUtil.formatNullStr(TagConst.globalMap.get("wx.appid")));

String appkey = (StrUtil.formatNullStr(TagConst.globalMap.get("wx.seckey")));

String mch_id = (StrUtil.formatNullStr(TagConst.globalMap.get("wx.mchid")));

String mchkey = (StrUtil.formatNullStr(TagConst.globalMap.get("wx.mchkey")));

 

String openId = ub.getUid();

String clientIP = HttpUtils.getIP(request);

if(clientIP.indexOf(":")>0) clientIP = "127.0.0.1";

 

String fee = StrUtil.formatNullStr(request.getParameter("fee"),"1");

String body = StrUtil.formatNullStr(request.getParameter("body"));

String atta = StrUtil.formatNullStr(request.getParameter("atta"));

 

String nonce_str = UUIDHexGenerator.generate();

String today = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());

String code = PayUtil.createCode(8);

String out_trade_no = mch_id+today+code;//商户订单号

String spbill_create_ip = clientIP;//终端IP

String trade_type = "JSAPI";//交易类型

String openid=openId;//用户标识

/**/

PayInfo paymentPo = new PayInfo();

paymentPo.setAppid(appid);

paymentPo.setMch_id(mch_id);

paymentPo.setNonce_str(nonce_str);

paymentPo.setBody(body);

paymentPo.setOut_trade_no(out_trade_no);

paymentPo.setTotal_fee(fee);

paymentPo.setSpbill_create_ip(spbill_create_ip);

paymentPo.setNotify_url(URL_NOTIFY);

paymentPo.setTrade_type(trade_type);

paymentPo.setOpenid(openid);

// 把请求参数打包成数组

Map<String, String> sParaTemp = new HashMap<String, String>();

sParaTemp.put("appid", paymentPo.getAppid());

sParaTemp.put("mch_id", paymentPo.getMch_id());

sParaTemp.put("nonce_str", paymentPo.getNonce_str());

sParaTemp.put("body", paymentPo.getBody());

sParaTemp.put("out_trade_no", paymentPo.getOut_trade_no());

sParaTemp.put("total_fee",paymentPo.getTotal_fee());

sParaTemp.put("spbill_create_ip", paymentPo.getSpbill_create_ip());

sParaTemp.put("notify_url",paymentPo.getNotify_url());

sParaTemp.put("trade_type", paymentPo.getTrade_type());

sParaTemp.put("openid", paymentPo.getOpenid());

// 除去数组中的空值和签名参数

Map<String, String> sPara = PayUtil.paraFilter(sParaTemp);

String prestr = PayUtil.createLinkString(sPara); // 把数组所有元素按照“参数=参数值”的模式用“&”字符拼接成字符串

String key = "&key="+mchkey; // 商户支付密钥

//MD5运算生成签名

String mysign = PayUtil.sign(prestr, key, "utf-8").toUpperCase();

paymentPo.setSign(mysign);

String respXml = MessageUtil.messageToXML(paymentPo);

respXml = respXml.replace("__", "_");

String url = "https://api.mch.weixin.qq.com/pay/unifiedorder";

String param = respXml;

String result =PayUtil.httpRequest(url, "POST", param);

Map<String, String> map = new HashMap<String, String>();

InputStream in=new ByteArrayInputStream(result.getBytes());

标签: tradeString