前沿:纯H5写的app需要支付功能,h+中有支付宝微信支付的demo,但是就支付宝而言
var PAYSERVER=‘http://demo.dcloud.net.cn/payment/?payid=’; 这个支付宝的请求地址没找到办法支付。
最后采用了经过修改代码如下
后台代码:
public String alipayMobile(OrderDetail orderdetail) throws AlipayApiException {Map<String,String> map = new TreeMap<String, String>();//bizcontent(业务字段)Map<String,String> bizMap = new HashMap<String,String>();bizMap.put("subject", orderdetail.getRoomName());//我这里用的是房间名字,根据业务写bizMap.put("out_trade_no", orderdetail.getOrderCode());//订单号bizMap.put("total_amount", orderdetail.getTradeAmt()+"");//金额bizMap.put("product_code", "QUICK_MSECURITY_PAY");//固定的String bizStr = JSON.toJSONString(bizMap);map.put("app_id", app_id);//自己的appid(申请的时候有的)map.put("method", "alipay.trade.app.pay");(就写这个)map.put("charset", "utf-8");map.put("sign_type", "RSA2");map.put("timestamp", DateTimeUtil.getDateString19());//时间格式参照官方给的中间有空格map.put("version", "1.0");map.put("notify_url", notify_url);//你的回调地址(异步通知用)map.put("biz_content", bizStr);//业务字段//拼接好的含有&的字符串String jsonStr2 = AlipaySignature.getSignContent(map);//获取签名(支付宝官方api)String sign = AlipaySignature.rsaSign(jsonStr2,merchant_private_key,"utf-8","RSA2");map.put("sign", sign);//对value值进行url编码for(Map.Entry<String, String> map2:map.entrySet()){String key = map2.getKey();String value = map2.getValue();value = URLEncoder.encode(value);map.put(key, value);}//获取最终的json串(支付宝官方api)String realStr = AlipaySignature.getSignContent(map);return realStr;}
manifest.json中
前端页面
正常来说应该先创建订单,然后调支付接口,然后通知后台,我们呢后端是做在一起了
//放在点击支付事件中
//创建订单 返回上面后端代码返回的字符串 如上图ajaxPostPay({amount:$(".mui-numbox-input").val(),item_id:info.item_id},'/order/create',function(data){// $("#zhifubao").html(data)var aliChannel = null; // 支付宝支付var channel = null; // 获取支付通道plus.payment.getChannels(function(channels){aliChannel=channels[0];//我把这个方法放在这里面没放外面,放外面会出现aliChannel还是null 无法调用支付宝plus.nativeUI.showWaiting();plus.nativeUI.closeWaiting();channel = aliChannel;if (data) {plus.payment.request(channel, data, function(result) {console.log(JSON.stringify(result));mui.alert("付费成功");}, function(e) {console.log(JSON.stringify(e));mui.alert("付费失败");});} else {plus.nativeUI.alert("支付失败");}});},function(e){alert("获取支付通道失败:"+e.message);});})
注意:在测试的时候发现本地环境调试失败,后端把包放到服务器上就可以了。