hbuilder webapp支付宝app支付

前言:

        支付类的东西都是按照官方写的文档一步一步来就可以搞定,关键就是第一次弄,一脸懵,不成功就很烦躁,这次项目用的是hbuilder打包的app方式,框架用的是mui,其实app支付的重点就是在签名这块,官方有工具可以验签,一般签名不错的话就差不多成功了,下面干活。

        后台主要代码:

        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;
}

    以上就可以获取返回前台的字符串啦。。。

    再看看hbuilder里写的代码(前台)

    manifest.json中

        

    前台js里

        var aliChannel = null; // 支付宝支付

        var channel = null; 

        // 获取支付通道
                plus.payment.getChannels(function(channels){
                    aliChannel=channels[0];
                },function(e){
                 alert("获取支付通道失败:"+e.message);

                });

                plus.nativeUI.showWaiting();
                    mui.post(访问后台的url, function(data) {
                        plus.nativeUI.closeWaiting();
                        channel = aliChannel;
                        console.log(data);
                        if (data) {
                            plus.payment.request(channel, data, function(result) {
                                console.log(JSON.stringify(result));
                                mui.alert("付费成功");
                            }, function(e) {
                                console.log(JSON.stringify(e));
                                alert(JSON.stringify(e));
                                mui.alert("付费失败");
                            });
                        } else {
                            plus.nativeUI.alert("支付失败");
                        }
                    });

       晚上以上代码就ok了,不成功的多注意一下签名是否正确,我自己测试的时候不用打包成app也可以成功的。。

猜你喜欢

转载自blog.csdn.net/lixiaoyi01/article/details/80115782