JAVAWEB开发的微信公众号H5付款

电脑杂谈  发布时间:2020-05-09 21:15:00  来源:网络整理

java微信支付接口开发_php开发app微信支付接口开发教程_微信支付java开发详细

所有需求均来自业务需求. 我们前一段时间进行了微信扫描代码付款,对于PC用户来说确实更加方便. 但是,如果手机订购了,您不能让用户自己打扫自己吗?在检查了文档之后,微信仍然支持通过公共帐户中的网页进行支付转移(前提是您必须具有微信服务帐户并申请微信支付功能).

因为该公司当前使用的支付项目是由JAVA代码开发的,但是微信给出的演示没有Java版本,只有PHP版本(PHP实际上是世界上最好的语言).

php开发app微信支付接口开发教程_java微信支付接口开发_微信支付java开发详细

可以跳过开幕词. 我们来看看微信提供的业务流程时序图:

乍看之下,它很吓人吗?实际上,扫描代码付款已经完成,逻辑仍然很简单,我们需要开发红色标记.

php开发app微信支付接口开发教程_java微信支付接口开发_微信支付java开发详细

尽管微信官方网站上的图片分布仍然非常详尽,但在这里我不得不重新考虑一下. 用户选择一个产品-> {很多过程,以后再写}->重定向到用户确认界面,包括一些产品信息,金额和其他信息->用户输入密码后,会出现一个成功的付款页面->用户单击以完成回调通知.

请求生成订单,生成商户订单,获取openID,下达统一订单以获取prepay_id参数,为JSAPI页面调用和签名生成支付参数.

微信支付java开发详细_php开发app微信支付接口开发教程_java微信支付接口开发

首先,请求生成订单. 下订单的API与扫描代码付款的API相同,但是参数不同. 1)交易类型trade_type的值必须为JSAPI(JSAPI--公共帐户付款,NATIVE--本地扫描代码付款,APP--app付款,统一订单界面trade_type的转移参数可以在这里参考MICROPAY- -刷卡付款,刷卡付款还有一个单独的付款界面,请勿调用统一订单界面)

2)当trade_type = JSAPI(即,公共帐户付款)时,用户ID openId是必需参数. 在此微信支付java开发详细,涉及获取问题. 有些文章说您可以下订单而无需获取订单. 测试微信支付java开发详细,至少我在这里不能做到.

微信支付java开发详细_java微信支付接口开发_php开发app微信支付接口开发教程

首先致电前台的微信; redirect_uri = http: //weixin.52itstyle.com/pay/weixinMobile/dopay&response_type=code&scope=snsapi_base&state=“ + xxxxx +” #wechat_redirect“;这时您将在后台代码参数的dopay方法中收到一个. = request.getParameter(“ code”);然后根据此代码获取用户openid,请参考具体方法.

3)生成命令后获取prepay_id,这是关键点,然后根据给定的参数进行加密; index =6. 最后,将参数返回到前台,即以url指定的方式付款.

流程图不保留,菊花戳人,所以最后附上一段代码:

/**
     * 预下单(对于已经产生的订单)
     * @Author    张志朋
     * @param request
     * @param response
     * @return
     * @throws Exception  String
     * @Date    2017年1月17日
     * 更新日志
     * 2017年1月17日 张志朋  首次创建
     *
     */
    @SuppressWarnings("rawtypes")
    @RequestMapping(value = "dopay")
    public String dopay(HttpServletRequest request, HttpServletResponse response) throws Exception {
        //其实这里只要传递一个订单编号即可
        String state = request.getParameter("state");
        String[] split = state.split("CUT");
        String totalFee = split[0];
        String orderNo = split[1];
        //获取code 这个在微信支付调用时会自动加上这个参数 无须设置
        String code = request.getParameter("code");
        //获取用户openID(JSAPI支付必须传openid)
        String openId = MobileUtil.getOpenId(code);
        String notify_url = "http://weixin.52itstyle.com/pay/weixinMobile/WXPayBack";//回调接口
        String trade_type = "JSAPI";// 交易类型H5支付
        SortedMap<Object, Object> packageParams = new TreeMap<Object, Object>();
        ConfigUtil.commonParams(packageParams);
        packageParams.put("body","测试微信H5支付");// 商品描述
        packageParams.put("out_trade_no", orderNo);// 商户订单号
        packageParams.put("total_fee", totalFee);// 总金额
        packageParams.put("spbill_create_ip", "127.0.0.1");// 发起人IP地址
        packageParams.put("notify_url", notify_url);// 回调地址
        packageParams.put("trade_type", trade_type);// 交易类型
        packageParams.put("openid", openId);//用户openID
        String sign = PayCommonUtil.createSign("UTF-8", packageParams,ConfigUtil.API_KEY);
        packageParams.put("sign", sign);// 签名
        String requestXML = PayCommonUtil.getRequestXml(packageParams);
        String resXml = HttpUtil.postData(ConfigUtil.UNIFIED_ORDER_URL, requestXML);
        Map map = XMLUtil.doXMLParse(resXml);
        String returnCode = (String) map.get("return_code");
        String returnMsg = (String) map.get("return_msg");
        String url ="";
        if("SUCCESS".equals(returnCode)){
            String resultCode = (String) map.get("result_code");
            String errCodeDes = (String) map.get("err_code_des");
            if("SUCCESS".equals(resultCode)){
                //获取预支付交易会话标识
                String prepay_id = (String) map.get("prepay_id");
                String prepay_id2 = "prepay_id=" + prepay_id;
                String packages = prepay_id2;
                SortedMap<Object, Object> finalpackage = new TreeMap<Object, Object>();
                String timestamp = DateUtil.getTimestamp();
                String nonceStr = packageParams.get("nonce_str").toString();
                finalpackage.put("appId",  ConfigUtil.APP_ID);
                finalpackage.put("timeStamp", timestamp);
                finalpackage.put("nonceStr", nonceStr);
                finalpackage.put("package", packages);  
                finalpackage.put("signType", "MD5");
                //这里很重要  参数一定要正确 狗日的腾讯 参数到这里就成大写了
                //可能报错信息(支付验证签名失败 get_brand_wcpay_request:fail)
                sign = PayCommonUtil.createSign("UTF-8", finalpackage,ConfigUtil.API_KEY);
                url = "redirect:/weixinMobile/pay?timeStamp="
                        + timestamp
                        + "&nonceStr=" + nonceStr + "&package=" + packages
                        + "&signType=MD5" + "&paySign=" + sign
                        +"&appid="+ ConfigUtil.APP_ID;
            }else{
                LogUtil.info("订单号:"+orderNo+"错误信息:"+errCodeDes);
                url = "redirect:/weixinMobile/error?code=0";//该订单已支付
            }
        }else{
            LogUtil.info("订单号:"+orderNo+"错误信息:"+returnMsg);
            url = "redirect:/weixinMobile/error?code=1";//系统系统
        }
        return url;
    }

pay.jsp


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/sanxing/article-204579-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...