微信支付H5统一下单

原文地址:http://www.jylt.cc/#/detail?id=a7757b04e3ab0758b5f5a02623b970a9

官方开发文档

微信支付H5开发文档

开发步骤

1.添加微信支付SDK依赖
<dependency>
	<groupId>com.github.wxpay</groupId>
	<artifactId>wxpay-sdk</artifactId>
	<version>版本号</version>
</dependency>
2.自定义微信配置常量
public interface WXPayConstant {
    /**
     * 商户号
     */
    String MCH_ID = "微信支付商户号";

    /**
     * 商户证书序列号
     */
    String MCHSERIAL_NO = "微信支付商户证书序列号";

    /**
     * apiV3Key
     */
    String API_KEY = "微信支付apiV3Key";
    String APP_ID = "appid";
}

3.自定义微信配置
import com.dfdz.wechatpay.constant.WXPayConstant;
import com.github.wxpay.sdk.WXPayConfig;

import java.io.InputStream;

public class MyWXPayConfig implements WXPayConfig {
    @Override
    public String getAppID() {
        return WXPayConstant.APP_ID;
    }

    @Override
    public String getMchID() {
        return WXPayConstant.MCH_ID;
    }

    @Override
    public String getKey() {
        return WXPayConstant.API_KEY;
    }

    @Override
    public InputStream getCertStream() {
        return null;
    }

    @Override
    public int getHttpConnectTimeoutMs() {
        return 0;
    }

    @Override
    public int getHttpReadTimeoutMs() {
        return 0;
    }
}

4.调用统一下单接口,获取支付跳转链接

可参考的代码:

    @PostMapping("/unifiedorder")
    public ServerResponse<UnifiedorderVO> unifiedorder(@Valid H5UnifiedorderDTO dto) {

        String notify_url = "https://test.notify.com";

        Map<String, String> map = new HashMap<>(16);
        String out_trade_no = (System.currentTimeMillis() + IdUtil.getId()).substring(0, 32);
        map.put("out_trade_no", out_trade_no);
        map.put("notify_url", notify_url);
        map.put("spbill_create_ip", "fe8::216:3eff:fe03:f842");
        map.put("trade_type", "MWEB");
        map.put("body", "测试统一下单-商品名");
        map.put("scene_info", "{\"h5_info\": {\"type\":\"Wap\",\"wap_url\": \"https://dev.notify.cn/wechatpay\",\"wap_name\": \"统一下单\"}}");

        map.put("total_fee", (int) BigDecimalUtil.mul(dto.getTotal_fee(), 100, 0) + "");

        WXPay wxPay = new WXPay(new MyWXPayConfig());
        String signType = WXPayConstants.MD5;
        try {
            Map<String, String> stringStringMap = wxPay.fillRequestData(map);
            Map<String, String> wxResponse = wxPay.unifiedOrder(stringStringMap);
            log.info("h5统一下单响应结果:{}", wxResponse.toString());

            String prepay_id = wxResponse.get("prepay_id");

            String timestamp = System.currentTimeMillis() / 1000 + "";
            String nonceStr = WXPayUtil.generateNonceStr();
            Map<String, String> signMap = new HashMap<>(16);
            signMap.put("appId", WXPayConstant.APP_ID);
            signMap.put("nonceStr", nonceStr);
            signMap.put("timeStamp", timestamp);
            signMap.put("package", "prepay_id=" + prepay_id);
            signMap.put("signType", signType);
            String paySign = WXPayUtil.generateSignature(signMap, WXPayConstant.API_KEY, WXPayConstants.SignType.MD5);
            return ServerResponse.createBySuccess(UnifiedorderVO.builder()
                    .appid(WXPayConstant.APP_ID)
                    .paySign(paySign)
                    .nonceStr(nonceStr)
                    .out_trade_no(out_trade_no)
                    .prepay_id(prepay_id)
                    .signType(signType)
                    .timeStamp(timestamp)
                    .mwebUrl(wxResponse.get("mweb_url"))
                    .build());
        } catch (Exception e) {
            log.error("统一下单失败!", e);
            throw new ServiceException(500, "统一下单失败!");
        }
    }
    
@Data
public class H5UnifiedorderDTO {

    @NotNull(message = "金额不能为空!")
    @Min(value = 0, message = "金额不能为负数!")
    private Double total_fee;
}

获取到参数mweb_url之后,前端可直接使用window.loction={mweb_url}即可。

CLPHP订单系统2016 WEB、WAP自适应版主要功能: 1.颠覆传统,增加产品型号、产品尺寸、产品颜色等产品多选项选择,满足亲们多样需求 2.超乎想象,自带十六种可自适应电脑站和手机站的样式,一套源码解决亲PC端、WAP端使用订单系统问题,全部为全新界面,更加美观、大气 3.带邮件提醒+手机短信提醒{手机邮箱开启短信提示功能即可},特别增强对将QQ邮箱设置为订单发件箱的支持;邮件标题进一步优化,显示订单编号、姓名、联系电话 4.产品套餐选择支持单选、复选、下拉选择,迎合亲们的各种喜好 5.带订单来路页面和下单页面地址检测 6.支持下单人IP追踪 7.支持设置同一IP下单间隔时间,防重复提交;增强恶意空单拦截,有效应对恶意客户拦截传递过程中的订单信息后提交空单行为 8.升级优化邮件系统内核到最新 9.对空间要求更宽泛,fsockopen、pfsockopen和stream_socket_client三个函数只需要开一个即可使用,支持绝大多数的PHP空间 10.相关提示更加人性化,拥有本订单系统的亲们能根据错误提示快速明了订单系统无法正常工作的原因,方便对症下药,迅速安装配置 11、增强支付宝付款接口,在支付宝业务调整,免签接口失效后,本店第一时间升级了订单系统,提供了收款码收款(支付宝收款码获取方法及替换方法见附送的WORD文档)及支付宝商户(即时到账、担保交易)双接口,方便买家根据自己的需求切换使用 12、新增微信付款接口,客户无需加好友,直接扫描二维码(微信支付付款二维码获取方法及替换方法见附送的WORD文档)完成支付。 13、加入伪数据库功能,订单提交失败自动写入设置好的数据文件中,确保不漏一单
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

记忆旅途

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值