java微信H5支付中遇到的问题都已解决 java代码 和html代码

1,开通账号,申请商户账号 打开连接https://pay.weixin.qq.com/index.php/partner/public/home (如图1)

          (图1)


   2,完成注册以后登录 进入(图2)

     (图2)


 点击H5支付开通

3,如果已开通 (如图3)

  (图3)


4点击开发配置菜单(如图4)添加域名,域名必须是备案过的


完了就可以开发了

下面是我的代码很简单

package controllers.payment.wechat;
import com.jpay.weixin.api.WxPayApi;
import com.jpay.weixin.api.WxPayApiConfig;
import constants.payment.MerchantAccountConstants;
import org.jdom.JDOMException;
import play.Logger;
import play.Play;
import playecsp.constants.EcspConstants;
import playecsp.controllers.EcspController;
import service.payment.IAliPayService;
import util.payment.H5ScencInfo;
import util.payment.HttpUtils;
import util.payment.PayCommonUtils;
import java.math.BigDecimal;
import javax.inject.Inject;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;


/**
 * 微信支付服务
 * Created by on 2016/11/24.
 */
@playecsp.annotations.EcspController(name = "微信支付")
public class H5WechatPayment extends EcspController {
    @Inject
    private static IAliPayService aliPayService;


    private static final String appID="xxxxx";//此处填写申请的appID
    private static final String mchID="1489896702";//此处填写申请商户号
    private static final String partnerKey="OYLBnUzRJw1qKgNXjY7akBQabbwgUFlO";//此处填写key
    private static String notify_url = "http://ftrain.yladc.com/fsp/wxpay/wxPayRecallForH5";//次处填写你的回调地址域名必须和上面图4出一样
    private static String name = "";
    public static WxPayApiConfig getApiConfig() {
        return WxPayApiConfig.New()
                .setAppId(appID)
                .setMchId(mchID)
                .setPaternerKey(partnerKey)
                .setPayModel(WxPayApiConfig.PayModel.BUSINESSMODEL);
    }
    public static void wapPayH5(BigDecimal totalPriceReal) throws Exception, IOException{
        System.out.println("--pay start--");
        String ip = PayCommonUtils.getHostIP();//终端Ip必须和域名绑定的机器上的外网Ip一致,网络环境未能通过安全验证,请稍后再试的错误
        // 获取终端 IP
        if (ip.isEmpty()) {
            ip = "127.0.0.1";
        }
        Integer totalPriceRealTurn=0;
        if(totalPriceReal!=null && !totalPriceReal.equals("")){
            totalPriceRealTurn= totalPriceReal.multiply(BigDecimal.valueOf(100)).intValue();
        }else{
            renderEcspJson("", "wechatPayment", EcspConstants.FAIL, "请输入金额");
        }
        //组装信息
        H5ScencInfo sceneInfo = new H5ScencInfo();
        H5ScencInfo.H5 h5_info = new H5ScencInfo.H5();
        //场景类型
        h5_info.setType("Wap");
        //WAP网站URL地址
        h5_info.setWap_url(notify_url);
        //WAP网站名
        h5_info.setWap_name(name);
        sceneInfo.setH5_info(h5_info);
        //WxPayApiConfig wxPayApiConfig=getApiConfig();
        Map<String, String> params=WxPayApiConfig.New()
                .setAppId(appID)//支付appId
                .setMchId(mchID)//商户号
                .setBody("H5支付测试")//商品描述
                .setSpbillCreateIp(ip)//终端IP
                .setTotalFee(totalPriceRealTurn.toString())//总金额
                .setTradeType(WxPayApi.TradeType.MWEB)//交易类型
                .setNotifyUrl(notify_url)//回调地址
                .setPaternerKey(partnerKey)//订单号
                .setOutTradeNo(String.valueOf(System.currentTimeMillis()))//订单号
                .setSceneInfo(sceneInfo.toString())//场景信息
                .setAttach("H5支付测试")//附加数据
                .build();
        String xml= mapToXml(params);
        //调用微信统一下单接口
        String resData = HttpUtils.sendReqForPost(xml.toString());
        //解析返回xml成map
        Map<String, String> map = new HashMap<String, String>();
        map = PayCommonUtils.doXMLParse(resData);
        if ("SUCCESS".equals(map.get("return_code")) && "SUCCESS".equals(map.get("result_code"))) {
            Logger.info(" order of weixin is successful :::" + map.get("code_url"));
            //向应用返回唤起链接mweb_url
            Map<String, String> retData = new HashMap<String, String>();
            retData.put("mweb_url", map.get("mweb_url"));
            retData.put("prepay_id", map.get("prepay_id"));
            renderEcspJson(retData, "wechatPayment", EcspConstants.SUCESS, "");
        } else {
            renderEcspJson("", "wechatPayment", EcspConstants.FAIL, map.get("return_msg"));
        }


    }
    /**
     * map 转 xml
     *
     * @param map
     * @return
     */
    private static String mapToXml(Map<String, String> map) {
        StringBuffer sf = new StringBuffer("<xml>");
        Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();


        while (iterator.hasNext()) {
            Map.Entry<String, String> entry = iterator.next();
            String key = entry.getKey();
            String value = entry.getValue();
            sf.append("<" + key + ">" + value + "</" + key + ">");
        }
        sf.append("</xml>");


        return sf.toString();
    }






    /**
     * h5信支付异步回调方法
     * Created by lpp on 2018/6/1.
     */
    public static void wxPayRecallForH5() throws IOException, JDOMException, InterruptedException {


        Logger.info(":::weixin pay of wxPayRecallForH5 recall :::");


    }


}


html代码


<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>h5支付</title>


    <link href="${ctx}/admin/css/common/bootstrap.css" rel="stylesheet">
    <link href="${ctx}/admin/css/common/font-awesome.min.css" rel="stylesheet">
    <!-- Expand styles -->
    <link href="${ctx}/admin/css/common/ecsp-ext.css" rel="stylesheet">
    <link href="${ctx}/admin/css/common/ecsp-size.css" rel="stylesheet">
    <link href="${ctx}/admin/css/common/ecsp-plugin.css" rel="stylesheet">
    <!-- Custom styles for this template -->
    <link rel="stylesheet" type="text/css" href="${ctx}/admin/css/theme/default_theme.css">
    <link href="${ctx}/lib/layer/skin/layer.css" rel="stylesheet">
</head>
<body>
<div class="login-container animated fadeInDown" style="text-align: center">
      请输入金额:<input type="text"  id="totalPriceReal"><br/>
    <br/>
    <input type="button" value="去支付" onclick="submintPay()">
</div>
<script src="${ctx}/js/jquery.min.js"></script>
<script src="${ctx}/js/bootstrap.min.js"></script>
<script>
    function submintPay(){
          var totalPriceReal=$("#totalPriceReal").val();//商品金额
         var reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
        if (reg.test(totalPriceReal)) {
            var orderIofn={
                "totalPriceReal":totalPriceReal
            };
            $.ajax({
                url:"/fsp/wxpay/wapPayH5",
                data:orderIofn,
                type: "POST",
                async: false,
                success:function(data){
                    if(data.header.retCode=='000000'){
                       // alert(JSON.stringify(data));
                        //支付唤起微信连接
                        var mweb_url=data.body.mweb_url;
                        //支付完成连接
                        var mweb_complete_url="http://ftrain.yladc.com/fsp/wechatpay/gotoPayCompletion";
                        self.location.href=mweb_url+"&redirect_url="+mweb_complete_url;
                    }else{
                        //alert(JSON.stringify(data));
                    }
                },
                error:function(){
                    layer.close(load_index);
                    layer.msg("删除失败");
                }
            });
        }else{
            alert("请输入合法金额");
        };




    }


</script>




</body>
</html>



猜你喜欢

转载自blog.csdn.net/qq_16927377/article/details/80542682
今日推荐