【微信支付接口调用】

微信支付

开发流程:

下单成功(预扣库存 wq)之后,把订单号返回前端,前端发送支付请求到后端,支付接口把订单号,应付金额传给微信支付系统,微信支付系统返回支付链接,我们把支付连接返回前端,前端通过一个插件展示成二维码,用户扫二维码支付,如果支付成功,微信支付系统会异步回调我们写的接口,我们可以主动查询订单的支付情况,如果支付成功,修改订单状态为已支付,同时插入流水,还要异步通知(websocket)客户端,前端页面跳转支付成功页面

1.下单接口,2.支付接口,3.支付成功给微信回调接口

统一下单接口调用

在线微信支付开发文档:https://pay.weixin.qq.com/wiki/doc/api/index.html

1.导入依赖

第一步:pom依赖

<dependency>
    <groupId>com.github.tedzhdz</groupId>
    <artifactId>wxpay-sdk</artifactId>
    <version>3.0.10</version>
</dependency>
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>

如果时springboot

<dependency>
    <groupId>com.github.tedzhdz</groupId>
    <artifactId>wxpay-sdk</artifactId>
    <version>3.0.10</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
        </exclusion>
    </exclusions>
</dependency>

2.微信支付配置类

package com.fzy.wx;

import com.github.wxpay.sdk.IWXPayDomain;
import com.github.wxpay.sdk.WXPayConfig;

import java.io.InputStream;
//微信支付配置类
public class WXConfig extends WXPayConfig {

    public String getAppID() {
        return "wx632c8f211f8122c6";
    }

    public String getMchID() {
        return "1497984412";
    }

    public String getKey() {
        return "sbNCm1JnevqI36LrEaxFwcaT0hkGxFnC";
    }

    public InputStream getCertStream() {
        return null;
    }

    public IWXPayDomain getWXPayDomain() {
        return new IWXPayDomain() {
            public void report(String s, long l, Exception e) {

            }

            public DomainInfo getDomain(WXPayConfig wxPayConfig) {
                return new DomainInfo("api.mch.weixin.qq.com",true);
            }
        };
    }
}

3.测试统一下单接口

步骤:
1:构建配置对象
2:封装请求参数
3:map转xml
4:发送请求WXPayRequest request = new WXPayRequest(config);
5:响应结果转map集合
6:获取支付地址
package com.fzy.wx;

import com.github.wxpay.sdk.WXPayRequest;
import com.github.wxpay.sdk.WXPayUtil;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

public class WxDemo {

    //统一下单接口
    public static void main(String[] args) throws Exception{

        WXConfig wxConfig = new WXConfig();

        //封装请求参数
        Map requestParamsMap = new HashMap();
        requestParamsMap.put("appid",wxConfig.getAppID());
        requestParamsMap.put("mch_id",wxConfig.getMchID());
        requestParamsMap.put("nonce_str", WXPayUtil.generateNonceStr());
        requestParamsMap.put("body","用户下单支付");
        requestParamsMap.put("out_trade_no", "1000000011");
        requestParamsMap.put("total_fee",88+"");
        requestParamsMap.put("spbill_create_ip","127.0.0.1");
        requestParamsMap.put("notify_url","http://www.baidu.com");
        requestParamsMap.put("trade_type","NATIVE ");

        //map转成xml
        String requestParamsXML = WXPayUtil.generateSignedXml(requestParamsMap, wxConfig.getKey());

        //发送请求(httpclient)
        WXPayRequest wxPayRequest  = new WXPayRequest(wxConfig);
        String responseXML = wxPayRequest.requestWithoutCert("/pay/unifiedorder", UUID.randomUUID().toString(), requestParamsXML, false);
        System.out.println("responseXML = " + responseXML);


        //解析xml     xml => map
        Map<String,String> responseMap = WXPayUtil.xmlToMap(responseXML);

        String code_url = responseMap.get("code_url");
        System.out.println("code_url = " + code_url);
    }
}

支付接口

@Override
public ResultVO pay(String orderSn, String userid){
//1.查询订单
        OmsOrder orderBySn = orderMapper.findOrderBySn(orderSn,userid);
        if (orderBySn == null) {
            return new ResuLtVO( false,"订单不存在");
        }
  
//判断订单支付状态
        if(!"0".equals(orderBySn.getStatus()+"")){
            return new ResuLtVO( false, "订单状态必须时待付款");
        }
  
//计算订单的支付金额
        BigDecimal payAmount = orderBySn.getPayAmount();
        BigDecimal payAmountFen = payAmount.multiply(new BigDecimal( "100"));
  
//调用微信的统一下单接口
        try {
            String codeUrl = wxpay(orderSn, payAmountFen.toString(),"http://www.baidu.com");
            return new ResuLtVO( true, "下单成功" , codeUrl);
        } catch (Exception e) {
            e.printStackTrace();
            return new ResuLtVO( false, "下单失败");
}
  
 //微信的统一下单接口
@Override
public String wxpay(String orderSn, String fee, String notifyUrl){
  
          WXConfig wxConfig = new WXConfig();

        //封装请求参数
        Map requestParamsMap = new HashMap();
        requestParamsMap.put("appid",wxConfig.getAppID());
        requestParamsMap.put("mch_id",wxConfig.getMchID());
        requestParamsMap.put("nonce_str", WXPayUtil.generateNonceStr());
        requestParamsMap.put("body","用户下单支付");
        requestParamsMap.put("out_trade_no", orderSn);
        requestParamsMap.put("total_fee",fee+"");
        requestParamsMap.put("spbill_create_ip","127.0.0.1");
        requestParamsMap.put("notify_url",notifyUrl);
        requestParamsMap.put("trade_type","NATIVE ");

        //map转成xml
        String requestParamsXML = WXPayUtil.generateSignedXml(requestParamsMap, wxConfig.getKey());

        //发送请求(httpclient)
        WXPayRequest wxPayRequest  = new WXPayRequest(wxConfig);
        String responseXML = wxPayRequest.requestWithoutCert("/pay/unifiedorder", UUID.randomUUID().toString(), requestParamsXML, false);
        System.out.println("responseXML = " + responseXML);


        //解析xml     xml => map
        Map<String,String> responseMap = WXPayUtil.xmlToMap(responseXML);

        String code_url = responseMap.get("code_url");
        System.out.println("code_url = " + code_url);
  
  		return code_url;
  }
  
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Python调用微信支付接口,首先需要安装并导入相关的Python库。常用的库有requests、xmltodict等。 首先,需要在微信支付官方网站申请并获取到支付接口的API密钥、APPID等信息。然后,使用requests库发送HTTPS请求,并在请求头中添加必要的信息,如用户的API密钥、签名类型、请求方法等。 在请求的主体部分,需要构建符合微信支付接口要求的XML格式的数据,包括必要的参数如商户订单号、总金额、商品描述等。可以使用xmltodict库将数据转换为XML格式,并将其作为请求的主体发送。 接下来,需要对请求的数据进行签名处理。微信支付接口要求对请求的参数进行MD5签名或者HMAC-SHA256签名。可以使用hashlib库计算MD5或HMAC-SHA256签名,并将签名结果添加到请求的参数中。 然后,将请求的数据发送到微信支付接口的URL。接收到响应后,需要对响应进行相应的处理,如判断响应的状态码、对返回的XML格式数据进行解析等。 最后,根据微信支付接口返回的结果,可以进行相应的业务逻辑处理。例如,判断支付是否成功、更新订单的状态等。 需要注意的是,在调用微信支付接口时要保证请求的安全性,如使用HTTPS协议、对请求的数据进行加密等。同时,还要遵循微信支付接口的相关规范,如接口版本的要求、接口参数的格式要求等。 总结起来,Python调用微信支付接口的过程主要包括:获取接口信息、构建请求数据、对请求数据进行签名处理、发送请求、处理响应、处理支付结果等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值