微信商户功能开通之免充值代金券

  • 官方文档地址

https://pay.weixin.qq.com/wiki/doc/api/download/mczyscsyl.pdf

  • 沙箱签名处理
  1. 方式1

微信支付接口签名校验工具 地址:

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

根据文档将参数放进去进行生成签名 

获取沙箱签名

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "<xml>\n\t<mch_id>11111111</mch_id>\n\t<nonce_str>12312312312312312321213</nonce_str>\n\t<sign>12312312312312312321213</sign>\n</xml>",
  CURLOPT_HTTPHEADER => array(
    "Content-Type:application/xml"
  ),
));

$response = curl_exec($curl);

$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

返回示例:

<xml>
    <return_code>
        <![CDATA[SUCCESS]]>
    </return_code>
    <return_msg>
        <![CDATA[ok]]>
    </return_msg>
    <sandbox_signkey>
        <![CDATA[8d8d2141c5a85d36eb2b470a84b30c78]]>
    </sandbox_signkey>
</xml>

提取沙箱key

2. 方式2

根据官方提供的插件 在postman中进行获取沙箱key

https://github.com/wechatpay-apiv3/wechatpay-postman-script

  • 进行api请求开通

我选择的模式是3、4、5 其实都不要紧 125 也能处理 

根据3的提示 是需要扫码 🔫 进行操作的 由于没有 可直接采用api的形式进行调用 首选需要一个openid 这个获取方式我就不说了 另外我要强调的是3中存在的步骤 首先需要下单 请求微信的下单api 不要被其中的5.51 5.52    迷惑了 只要用5.52就行了 然后下单完成之后 再请求查询api 然后在申请页面进行刷新 查看状态 3里面的操作只有全部完成 才会显示出该操作已完成 

4的话和3类似 多了两步 下单、查询、退款、退款查询 主要curl的请求存在两种 如果失败的话 可以尝试使用https的请求进行处理 另外一种问题就是 curl里面的CURLOPT_HTTPHEADER 要采用xml的 如果不行 删除进行请求 然后在恢复进行二次请求 别问我为什么 我不知道  另外一种情况就是下单金额和退款金额 如果存在退款查询失败的话 就重复4里面的四个操作 金额由5.51改为5.52 反之也对  

5的问题就很简单了 请求下载 但是也会出现false的情况 尽量多试几次 然后等会在刷新申请页面进行查看 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,在微信小程序后台添加一个支付接口,获取户号、AppID、AppSecret、户支付密钥等信息。然后,我们可以使用微信提供的SDK进行开发。 1. 添加依赖 在pom.xml文件中添加以下依赖: ```xml <!-- 微信支付 SDK --> <dependency> <groupId>com.github.wxpay</groupId> <artifactId>wxpay-sdk</artifactId> <version>3.0.9</version> </dependency> ``` 2. 配置参数 在配置文件中添加微信支付相关参数: ```yaml wx: pay: appId: xxx # 公众账号ID mchId: xxx # 户号 mchKey: xxx # 户支付密钥 notifyUrl: xxx # 支付回调地址 tradeType: JSAPI # 交易类型 ``` 3. 编写支付逻辑 编写一个接口,接收用户传来的金额,然后调用微信支付API生成预支付订单,并返回给小程序前端。前端根据返回的信息调起微信支付界面进行支付。 ```java @RestController @RequestMapping("/recharge") public class RechargeController { @Autowired private WxPayService wxPayService; @Value("${wx.pay.notifyUrl}") private String notifyUrl; @PostMapping("/pay") public Result recharge(@RequestParam("amount") Integer amount) throws Exception { // 生成订单号 String orderId = UUID.randomUUID().toString().replace("-", ""); // 构建请求参数 WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest(); request.setBody(""); request.setOutTradeNo(orderId); request.setTotalFee(BaseWxPayRequest.yuanToFen(String.valueOf(amount))); request.setSpbillCreateIp("127.0.0.1"); request.setNotifyUrl(notifyUrl); request.setTradeType(WxPayConstants.TradeType.JSAPI); request.setOpenid("用户的openid"); // 调用统一下单API WxPayMpOrderResult result = wxPayService.createOrder(request); // 返回给前端的参数 Map<String, Object> map = new HashMap<>(); map.put("appId", result.getAppId()); map.put("timeStamp", String.valueOf(System.currentTimeMillis() / 1000)); map.put("nonceStr", result.getNonceStr()); map.put("package", "prepay_id=" + result.getPrepayId()); map.put("signType", "MD5"); map.put("paySign", wxPayService.createSign(map)); return Result.success(map); } } ``` 4. 处理支付回调 当用户支付成功后,微信服务器会向我们预设的回调地址发送一个POST请求,我们需要在该地址提供回调方法,处理支付结果。 ```java @RestController @RequestMapping("/wx/pay") public class WxPayController { @Autowired private WxPayService wxPayService; @PostMapping("/notify") public String notify(HttpServletRequest request) throws Exception { ServletInputStream inputStream = request.getInputStream(); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len; while ((len = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, len); } String xml = outputStream.toString("UTF-8"); WxPayOrderNotifyResult result = wxPayService.parseOrderNotifyResult(xml); if ("SUCCESS".equals(result.getResultCode())) { // 处理支付成功逻辑 return "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>"; } return "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[处理失败]]></return_msg></xml>"; } } ``` 以上就是整合微信小程序实现功能的demo,需要注意的是,本例中的支付流程仅供参考,实际开发中还需要考虑诸如安全性、异常处理等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值