微信支付遇到的坑(时区问题导致二维码不出来)

检查了好久发现官方文档有这么一句话。

5、时间
标准北京时间,时区为东八区;如果商户的系统时间为非标准北京时间。参数值必须根据商户系统所在时区先换算成标准北京时间, 例如商户所在地为0时区的伦敦,当地时间为2014年11月11日0时0分0秒,换算成北京时间为2014年11月11日8时0分0秒。
6、时间戳
标准北京时间,时区为东八区,自1970年1月1日 0点0分0秒以来的秒数。注意:部分系统取到的值为毫秒级,需要转换成秒(10位数字)。

然后我发现我的商城用的是UTC时区,官方demo用的是
ini_set(‘date.timezone’,’Asia/Shanghai’);
我不能为了这个修改我的程序时区啊所以就可以在支付的时候临时设置下
date_default_timezone_set(‘Asia/Shanghai’);
这样就OK了,这个坑好深- -

生成微信支付二维码可以通过以下步骤: 1. 调用微信支付接口生成预支付订单,获取到预支付订单号。可以通过微信支付官方提供的API实现这一步骤。 2. 将预支付订单号作为参数,调用微信支付接口生成支付二维码,获取到支付二维码的url。可以使用微信支付官方提供的“统一下单接口”来实现这一步骤。 3. 在后端将支付二维码的url返回给前端,前端展示二维码供用户扫描。 以下是生成微信支付二维码的代码示例(使用Node.js): ```javascript const request = require('request'); const crypto = require('crypto'); const querystring = require('querystring'); // 微信支付API密钥,需要在微信商户平台设置 const key = 'your_wechat_pay_api_key'; // 微信支付统一下单接口URL const unifiedOrderUrl = 'https://api.mch.weixin.qq.com/pay/unifiedorder'; function generateUnifiedOrder(params) { // 按照微信支付要求对参数进行签名 const signParams = Object.assign({}, params, {key}); const signString = querystring.stringify(signParams); const hash = crypto.createHash('md5'); const sign = hash.update(signString, 'utf8').digest('hex').toUpperCase(); // 组装请求参数 const requestData = Object.assign({}, params, {sign}); // 发送请求 request({ url: unifiedOrderUrl, method: 'POST', body: requestData, json: true }, function(err, response, body) { if (err) { console.error(err); return; } // 解析响应数据 const { return_code, result_code, code_url } = body; if (return_code === 'SUCCESS' && result_code === 'SUCCESS') { // 支付二维码URL const qrCodeUrl = code_url; console.log(qrCodeUrl); } else { console.error('生成支付二维码失败'); } }); } // 调用生成支付二维码函数,传入必要的参数 generateUnifiedOrder({ appid: 'your_wechat_appid', mch_id: 'your_wechat_mch_id', nonce_str: Math.random().toString(36).substr(2, 15), body: '商品描述', out_trade_no: '订单号', total_fee: 1, // 单位为分 spbill_create_ip: '用户IP地址', notify_url: '支付结果通知地址', trade_type: 'NATIVE' // 生成扫码支付二维码 }); ``` 以上代码演示了如何调用微信支付API生成支付二维码。需要注意的是,这里只是演示了生成支付二维码的过程,具体实现还需要根据实际情况进行调整和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

若水印象

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

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

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

打赏作者

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

抵扣说明:

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

余额充值