微信支付接口

微信支付接口交互流程

1     用户想要购买商品生成订单和支付订单
2     调用微信统一下单API    
3     微信通过传入的参数   返回参数  其中有支付二维码链接
4     将生成的链接转换为二维码给前端
5      用户扫码
6    提交链接信息,微信判断链接是否有效
7    返会让用户进行支付授权
8    用户授权给微信并且输入支付密码


9-10 两个步骤是推送数据     微信一共会推送24小时4分    过了这个时间如果商户还没有告知微信接收情况就不再推送支付状态

9    微信完成支付进行回调返回给商户支付结果
10  商户再去告诉微信是否接收成功

11这个步骤是9步骤一直没有返回最新数据那么就会去主动拉取状态

11 如果商户一直没有收到微信告知的结果就去主动调用微信接口询问支付状态

返回链接一共有一个小时的时效性

开通商户后微信给的关键数据​​​

  • 公众号ID   appid

  • 商户ID     mach_id

  • 秘钥      key

调用微信支付接口请求和返回参数参数

请求参数

 

返回参数

return_code 和 result_code为SUCCESS区别:

return_code:    返回的是微信响应的成功或者失败
 result_code:   返回的是业务处理的成功与否

只有当这两个都是SUCCESS才会返回url

当return_code为SUCCESS时返回的数据

当return_code 和 result_code为SUCCESS的时候有返回
 

其中二维码链接就是当 return_code 和 result_code为SUCCESS才会返回

微信V2和V3的区别 

v2返回的结果为xml类型的

v3返回的结果为JSON类型的


微信支付使用步骤

第一步,导入依赖:

<dependency>
    <groupId>com.github.binarywang</groupId>
    <artifactId>weixin-java-pay</artifactId>
    <version>3.4.0</version>
</dependency>

第二步  将商户的重要信息添加到配置文件:

下边的配置信息会被第三步的配置类WxPayConfig自动读进去

#商户微信公共号或开放平台唯一标识
weixinpay.app-id = xxxxxxxxxx
#商户号
weixinpay.mch-id = xxxxxxxxxx
#商户密钥
weixinpay.mch-key = xxxxxxxxxx
#微信回调商户的地址
weixinpay.notify-url = http://xxx
#商户的支付类型(NATIVE 为扫码支付)
weixinpay.trade-type = NATIVE

第三步,创建配置类:

package com.xuecheng.order.config;
import com.github.binarywang.wxpay.config.WxPayConfig;
import com.github.binarywang.wxpay.service.WxPayService;
import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
 * <P>
 * WebMvc Config
 * </p>
 */
@Configuration
public class WXPayConfig{
	/**
	 * 第三方jar包已存在微信支付配置类,这里直接和配置属性关联
	 * @return
	 */
	@Bean("wxPayConfig")
	@ConfigurationProperties(prefix = "weixinpay")
	public WxPayConfig wxPayConfig(){
		return new WxPayConfig();
	}
	/**
	 * 创建 WxPayService 实现类,并将其 WxPayConfig 配置类配置到支付服务类中
	 * @return
	 */
	@Bean
	public WxPayService wxPayService(@Qualifier("wxPayConfig") WxPayConfig wxConfig) {
		WxPayService wxPayService = new WxPayServiceImpl();
		wxPayService.setConfig(wxConfig);
		return wxPayService;
	}
}

这个类是以后调用时注入这个类,操作就是这个类

测试

@SpringBootTest
@RunWith(SpringRunner.class)
public class WXPayTest {
    @Autowired
    private WxPayService wxPayService;
    @Test
    public void test() throws UnknownHostException, WxPayException {
        // 1.创建统一下单的请求对象
        WxPayUnifiedOrderRequest unifiedOrderRequest = new WxPayUnifiedOrderRequest();
        // 2.设置统一下单数据
        // 商品描述
        unifiedOrderRequest.setBody("测试数据");
        // 商品订单号
        unifiedOrderRequest.setOutTradeNo(PaymentUtil.genUniquePayOrderNo());
        // 商品金额(单位为:分)
        unifiedOrderRequest.setTotalFee(100);
        // 生成二维码的终端IP地址
        unifiedOrderRequest.setSpbillCreateIp(InetAddress.getLocalHost().getHostAddress());
        // 订单的详情描述
        unifiedOrderRequest.setDetail("测试一下");
        // 订单的商品Id号
        unifiedOrderRequest.setProductId("123123123");
        // 3.调用service获得生成二维码的结果数据
        WxPayUnifiedOrderResult result = wxPayService.unifiedOrder(unifiedOrderRequest);
        System.out.println("-----------------获得结果信息--------------------");
        // 获得返回码
        System.out.println(result.getReturnCode());
        // 获得结果码
        System.out.println(result.getResultCode());
        // 获得二维码路径
        String codeURL = result.getCodeURL();
        System.out.println(codeURL);
    }
}

 测试二:

   //4:获取微信的二维码链接
        WxPayUnifiedOrderResult response = null;
        try {
            response = getWxPayUrl(orders);
        } catch (Exception e) {
            return PayCodeUrlResult.failed(response.getErrCodeDes());
        }
        //5:封装到PayCodeUrlResult返回
        // 只有返回状态码和业务结果都成功才嗯那个得到url        return_code:代表业务处理成功或者失败     result_code: 代表响应的成功失败
        String flag = PayCodeUrlResult.WX_PAY_SUCCESS_FLAG;
        if (response.getResultCode().equalsIgnoreCase(flag) && response.getResultCode().equalsIgnoreCase(flag)) {
            return PayCodeUrlResult.success(response.getCodeURL());
        } else {
            return PayCodeUrlResult.failed(response.getErrCodeDes());
        }

/**
     * 生成微信支付URL
     *
     * @param orders
     * @return
     */
    private WxPayUnifiedOrderResult getWxPayUrl(Orders orders) throws Exception {
        //创建统一下单对象
        WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
        //商品描述
        request.setBody(orders.getCoursePubName());
        // 订单编号
        request.setOutTradeNo(orders.getOrderNo());
        // 商品金额              BaseWxPayRequest.yuanToFen("1")为将元转换为分    因为TotalFee接收的就是分
        request.setTotalFee(BaseWxPayRequest.yuanToFen(orders.getPrice().toString()));
        //获得本机的ip地址
        String hostAddress = InetAddress.getLocalHost().getHostAddress();
        request.setSpbillCreateIp(hostAddress);
        //商品id
        request.setProductId(orders.getCoursePubId().toString());

        //发送请求
        WxPayUnifiedOrderResult response = wxPayService.unifiedOrder(request);
        return response;
    }

官方接口文档

https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1

查询订单API

https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_2

统一下单API文档

https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1

  • 9
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值