通过生成支付二维码来实现微信支付的解决方案 - EasyWechat版
还有一种情况,比如现在北哥兄弟连PC版,是生成了一个二维码,这个二维码是专属的,扫描后直接就蹦出了支付页面。现在告诉你它如何实现的~
本文相关框架
- Yii2
- EasyWechat
忆往昔
上节课我们讲了一个很重要的概念,那就是预支付交易回话标识 “我们先调用接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易回话标识后再按扫码、JSAPI、APP等不同场景生成交易串调起支付。”
换句话说,获取预支付交易回话标识 这步基本都是一致的,不同就在于场景不同,大家一定要举一反三。
那么你还记得上篇我们获取 预支付交易回话标识 的代码实现么?
忘记了?那你先穿越下:开启穿越门
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LYZTLoBU-1588317971337)(https://nai8.me/uploads/question/2017/0618/1497773052-594633fc77c84.png)]
核心就是这段代码
Now
我先来模拟一个场景,假设我们现在有一个action(index.php?r=charge/qrcode)负责生成上篇文章充值花费的微信二维码,希望结果是微信扫码后,不进入任何页面,直接蹦出输入支付密码的地方,然后就支付了。
// ChargeController
use EasyWeChat\Foundation\Application;
use EasyWeChat\Payment\Order;
...
/*** 生成支付二维码**/
public function actionQrcode(){$charge = new Charge();// 刷刷刷一堆代码,就生成了未付款订单。// 通过EasyWechat来调用$config = Yii::$app->params['WECHAT'];$wxApp = new Application($config);$payment = $wxApp->payment;$notifyUrl = Yii::$app->request->getHostInfo() . Url::to(['/wechat/charge/notify-qrcode']);$attributes = ['trade_type'=>Order::NATIVE,//不同点'body'=>"商品描述",'detail'=>"商品简介",'out_trade_no'=>$charge->number,'total_fee'=>$charge->money*100,'notify_url'=>$notifyUrl];$o = new Order($attributes);$result = $payment->prepare($o);if ($result->return_code == 'SUCCESS' && $result->result_code == 'SUCCESS'){$prepayId = $result->prepay_id;$codeUrl = $result->code_url; }
}
...
上面的codeUrl就是支付二维码内容,从这里你看到了,其实流程还是一样的,先获得一个prepayId(Native类型),然后获得一个codeUrl,当然,在视图里面你需要用一个库将这个codeUrl生成一个二维码(可以使用Yii的yii2-qrcode-helper库或js库都成)。
要注意:这个过程是原生的微信支付,和公众号没有半毛钱关系,因此在$attributes 里你看到了,没有 openid 这个必填项了已经,这点要尤其注意
然后浏览器就会出现一个二维码,如下图。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zfJO3vPS-1588317971349)(http://nai8.me/images/qrcode-sub-small.jpg)]
你真的用微信扫了?好纯真的少年呀,这是北哥小报的公众号二维码呀。好了,反正你将codeUrl的内容生成了一个二维码,客户微信扫描后。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Krf1VAoU-1588317971352)(https://nai8.me/uploads/question/2017/0618/1497779646-59464dbea18e9.jpg)]
然后客户进行支付,钱就刷刷刷的进入到微信支付平台账号啦。
哦,还有一点,就是我们如何知道微信支付成功了那,对于原生扫码支付,我们也需要给微信提供一个异步通知的地址,对,就是那个$notifyUrl,看来你认真看了上一篇。
在上面设置生成二维码代码里我们定义了一个url
$notifyUrl = Yii::$app->request->getHostInfo() . Url::to(['/wechat/charge/notify-qrcode']);
现在我们就用它来接收微信给我们的反馈
public function actionNotifyQrcode(){$config = Yii::$app->params['WECHAT'];$wxApp = new Application($config);$payment = $wxApp->payment;$response = $payment->handleNotify(function ($notify, $successful){if ($successful) {$order_arr = json_decode($notify, true);$transactionId = $order_arr['transaction_id'];// $order_arr就是微信异步通知给服务器的信息//todo 我们的逻辑,将charge变为已支付}});$response->send();
}
很奇怪是么,它和接收公众号支付类的notify是一样的,而且EasyWeChat封装的就几行代码,很是简单。
要注意:这也是一个POST请求,请关闭该方法的csrf验证,否则Yii会将其拒之门外。
这就完了么?是的。
还有其他的么
二维码支付其实比公众号设置的更简单,你也看到了,生成二维码,然后扫描接收支付通知,处理本地逻辑。
关于APP的的微信支付要往后放一放,这个还要涉及对于APP SDK的配置等。
接下来我们还会将微信企业支付接口和微信发红包接口这两个微信支付。
通过生成支付二维码来实现微信支付的解决方案 - EasyWechat版相关推荐
- 怎样实现一个二维码同时支持微信支付和支付宝支付
生成的二维码是一个网页的链接,应用打开网页的时候,是在该应用打开的该网页,网页通过检测打开网页的应用的标识进行分辨,如果是微信支付就跳转的微信的支付接口,如果只支付宝就跳转到支付宝的支付接口
- 二维码如何区分微信支付还是支付宝
判断实现方式可以从前端Javascript实现和后端实现 一.前端实现方式 只需要判断 userAgent 是 MICROMESSENGER 或者 ALIPAYCLIENT就行. MICROME ...
- 微信支付二维码链接,微信内才能打开 怎么才能做到单独跳转
weixin://wxpay/bizpayurl?pr=fQrYYGd 像这种支付二维码链接 微信内才能打开 怎么才能做到单独跳转 怎么让微信打开这个链接呢 :code_url ( weixin:// ...
- 免签接口 个人二维码收款系统/微信支付支付宝支付二维码监听自动发货/个人免签系统/个人免签支付 微信.支付宝 个人支付监控
开源个人收款码免签系统 服务端和监控端全部开源,自建支付平台,安全更放心,二开更方便 没有中间商赚差价,买家扫多少,商家收多少 一.系统特色 1.1 支持 支付宝个人收款的推送通知 支付宝商家二维码的 ...
- python制作微信个人二维码_无聊的脚本,python生成随机二维码,手机微信自动扫脚本。...
本帖最后由 打字的小强 于 2018-10-11 09:39 编辑 QQ截图20181011084421.png (346.67 KB, 下载次数: 0) 2018-10-11 08:46 上传 首先 ...
- pc端生成支付宝支付二维码
验签类RSA.php <?php namespace App\Library; class RSA{ /** * RSA签名 * @param $data 待签名数据 ...
- Android之扫描二维码和根据输入信息生成名片二维码
开发中常常遇到二维码扫码操作,前段时间做项目要实现该功能,于是网上查找资料实现了,现在把他做出来给各位分享一下,主要包含了二维码扫描和生成二维码名片, 先来看看效果图: 生成的二维码,打开微信扫一 ...
- 支付宝支付 第六集:生成支付二维码
支付宝支付 第六集:生成支付二维码 一.资源 支付宝沙箱显示APP-ID错误:我的原因是支付宝网关地址写错了 支付宝沙箱环境报 invalid-app-id 错误原因: 无效的AppID参数 错误 支 ...
- 聚合支付二维码生成原理
聚合支付二维码生成原理 聚合支付平台提供平台支付URL,生成统一的支付二维码.当消费者根据二维码扫描时,聚合支付平台根据扫描者浏览器类型判断支付类型,并提交参数给聚合支付平台支付处理接口处理.平台支付 ...
最新文章
- 宏基因组学习交流5群成立
- 做服务器_码迷SEO:细数那些做SEO巨坑的服务器们
- build-your-microservices-api-with-swagger
- py爬取英文文档学习单词
- 直播 | SemEval-2020自由文本关系抽取冠军方案解读(附NLP竞赛常用技巧总结)
- redis常用数据类型的场景,你真的用对了么?
- SliceProceduralMesh的使用
- unix 登录mysql_实例分析mysql用户登录。
- java集合进行排序的两种方式
- kibana-7.3.0安装配置
- 禁止root,处理错误 sudo must be owned by uid 0
- Matlab中fread函数用法
- c语言编程编写笑脸,用C语言编写笑脸游戏.doc
- WPF StackPanel控件使用方法
- Node.js mm131图片批量下载爬虫1.00 iconv协助转码
- 柠檬班高性能测试jmeter loadrunner 11期
- 994. 腐烂的橘子 (广度探索)
- Android Notification消息提示
- echarts 关系图graph
- 微信小程序使用echarts实时更新数据以及常见bug