.net core 微信扫码支付1(扫码支付,h5支付,公众号支付,app支付)

 在做微信支付前,首先要了解你需要什么方式的微信支付,目前本人做过的支付包含扫码支付、H5支付、公众号支付、App支付等,本人使用的是asp.net mvc core2.0框架开发,core技术目前国内用的不算多,所以本人总结使用asp.net mvc core开发微信支付的一些经验,之前都在博客园学习,没有写过文章,文笔差(技术也差哈哈),欢迎指正。

  首先定义个微信支付参数保存的类,本人定义类如下,具体参数意义就只有去参考微信官方文档了,后台接口开发都将用到这边的参数,若支付不使用公众号支付和app支付的话appSecret参数将不用获取。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

public class WxPayConfig

    {

        public static WxPayConfig Instance = new WxPayConfig();

 

        public string appid = "";//APPID

 

        public string mchid = "";//商户号

 

        public string key = "";//商户API密钥

 

        public string appSecret = "";//公众号支付和app支付时候将用到

 

        public string notify_url = "http://www.baidu.com/Pay/WxNotify";//回调页地址

 

        public string api_url = "https://api.mch.weixin.qq.com/pay/unifiedorder";//微信支付调用接口地址

    }

  首先说一下扫码支付大体流程,首先微信得开通商户平台得扫码支付功能具体在 https://pay.weixin.qq.com上登陆,填写相关才材料开通扫码支付,开通完成后支付产品里将出现已开通的支付列表,然后使用获取到的参数拼接成对应格式的xml文件上传到微信服务器,如果配置正常服务器将返回一串xml文本,获取xml文本中的code_url地址,将该地址转为图片二维码展示在网站中。

1.申请扫码支付接口


 

 

2.配置微信扫码支付回调链接(貌似不配置扫码支付也可以用)


 

 

3.编写扫码支付服务, 扫码支付需要用到的appid,mchid,key 等参数,代码如下


 

首先在nuget中安装Senparc.Weixin.MP

扫码支付服务类方法:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

                /// <summary>

        /// 获取微信扫码支付URL

        /// </summary>

        /// <param name="out_trade_no">订单号</param>

        /// <param name="body">描述</param>

        /// <param name="total_fee">总价</param>

        /// <param name="ip">客户IP</param>

        /// <param name="product_id">商品id</param>

        /// <returns></returns>

        public string GetWxSMPayUrl(string out_trade_no, string body, string total_fee, string ip, string product_id)

        {

            Senparc.Weixin.MP.TenPayLibV3.RequestHandler packageReqHandler = new Senparc.Weixin.MP.TenPayLibV3.RequestHandler();

            #region 构造请求参数

            packageReqHandler.SetParameter("appid", wxPayConfig.appid);//APPID

            packageReqHandler.SetParameter("mch_id", wxPa

要使用 `com.github.wechatpay-apiv3` 库处理微信 H5 支付的异步通知,您可以按照以下步骤进行操作: 1. 在项目的 Maven 配置文件(例如 `pom.xml`)中添加 `com.github.wechatpay-apiv3` 的依赖项: ```xml <dependencies> <dependency> <groupId>com.github.wechatpay-apiv3</groupId> <artifactId>wechatpay-apache-httpclient</artifactId> <version>1.0.0-beta4</version> </dependency> </dependencies> ``` 2. 在异步通知的接口中编写代码。 ```java import com.github.wechatpay.apiv3.WxPayApiV3; import com.github.wechatpay.apiv3.WxPayApiV3Config; import com.github.wechatpay.apiv3.model.notify.WxPayOrderNotifyResult; import com.github.wechatpay.apiv3.model.notify.WxPayOrderNotifyResult.NotifyResponse; import com.github.wechatpay.apiv3.model.notify.WxPayOrderNotifyResult.Resource; import org.apache.hc.core5.http.io.entity.EntityUtils; import org.apache.hc.core5.http.nio.entity.BasicAsyncEntityConsumer; import org.apache.hc.core5.ssl.SSLContextBuilder; import org.apache.hc.core5.util.Timeout; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.security.KeyStore; public class WeChatH5NotifyHandler { private static final String WECHAT_API_CERT_SERIAL_NUMBER = "YOUR_WECHAT_API_CERT_SERIAL_NUMBER"; private static final String WECHAT_API_CERTIFICATE_PATH = "path/to/your/wechat/api/certificate.p12"; private static final String WECHAT_API_CERTIFICATE_PASSWORD = "your_certificate_password"; public void handleNotify(HttpServletRequest request, HttpServletResponse response) throws IOException { try { // 创建微信支付 API 配置 WxPayApiV3Config config = new WxPayApiV3Config.Builder() .appId("your_app_id") .merchantId("your_merchant_id") .privateKeySerialNumber(WECHAT_API_CERT_SERIAL_NUMBER) .privateKey(getPrivateKey()) .build(); // 创建微信支付 API 实例 WxPayApiV3 wxPayApiV3 = new WxPayApiV3(config); // 读取异步通知的请求体 String notifyData = EntityUtils.toString(new BasicAsyncEntityConsumer(), request.getInputStream(), StandardCharsets.UTF_8); // 解析异步通知数据 WxPayOrderNotifyResult notifyResult = wxPayApiV3.parseOrderNotifyResult(notifyData); // 验证签名 if (wxPayApiV3.verifySignature(notifyResult)) { // 签名验证成功 // 处理支付成功的逻辑 // ... // 返回成功响应给微信服务器 response.setStatus(HttpServletResponse.SC_OK); response.getWriter().write("SUCCESS"); } else { // 签名验证失败,返回失败响应给微信服务器 response.setStatus(HttpServletResponse.SC_BAD_REQUEST); response.getWriter().write("FAIL"); } } catch (Exception e) { e.printStackTrace(); // 返回失败响应给微信服务器 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); response.getWriter().write("FAIL"); } } private KeyStore getPrivateKey() throws Exception { return SSLContextBuilder .create() .loadKeyMaterial(getClass().getClassLoader().getResourceAsStream(WECHAT_API_CERTIFICATE_PATH), WECHAT_API_CERTIFICATE_PASSWORD.toCharArray()) .build() .getKeyStore(); } } ``` 在上述代码中,我们创建了一个名为 `WeChatH5NotifyHandler` 的类,其中的 `handleNotify` 方法用于处理微信 H5 支付的异步通知。该方法接收 `HttpServletRequest` 和 `HttpServletResponse` 对象作为参数,从请求中获取异步通知的数据,并进行相应的处理逻辑。 在 `handleNotify` 方法中,我们首先创建了一个 `WxPayApiV3Config` 对象,用于配置微信支付 API 的相关参数。其中,我们需要提供应用 ID(`appId`)、商户号(`merchantId`)、微信支付 API 证书的序列号(`privateKeySerialNumber`)以及证书的私钥(`privateKey`)。您需要将这些参数替换为您自己的值。 然后,我们使用 `WxPayApiV3` 实例来解析异步通知数据,并验证签名。如果签名验证成功,则表示支付成功,可以进行相应的处理逻辑,并返回成功响应给微信服务器。如果签名验证失败,则返回失败响应给微信服务器。 请注意,以上示例代码仅供参考,具体的实现可能因应用的需求而有所不同。您需要根据实际情况进行修改和完善。另外,在真实的项目中,请确保您已正确配置和保护微信支付 API 证书的私钥。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值