[
](https://lccdn.phphub.org/uploads/images/201712/07/76/SNw418ffHi.jpg)
很多人都想出售自己的一些产品,课程,电子书,或者其它在线可售卖的东西,但是不管是微信支付还是支付宝,都需要公司账户,这一套不是不可以搞,就是太麻烦了而已。今天介绍的就是不需要公司账号实现个人收款的自动化方案(当然,交易 1% 手续费比微信等略高)。
思路是:
环境准备:在有赞开通微小店(免费)-> 注册有赞云 -> 创建自用型应用 -> 绑定微小店 -> 开通 push (推送交易状态)
交易流程:调用有赞云的收银 API ,创建支付二维码(并存储二维码 id 到自有网站订单) -> 用户扫描二维码并支付 -> 推送交易状态到你的网站 -> 更新网站订单状态 -> 完成购买
第一步:开通微小店
去这里注册并开通小店:https://h5.youzan.com/v2/index/wxdpc (手机下载客户端开通哦,不是微商城!是微小店,免费的!)
第二步:注册有赞云
去这里注册个人开发者:https://www.youzanyun.com/ ,然后创建自用型应用,填写应用名称,下一步,选择你上面开通的小店名称并完成授权绑定。
[
](https://lccdn.phphub.org/uploads/images/201712/07/76/NOhjBYJo3U.png)
注意:这里绑定应用的时候是没有微小店选项的,填写完应用名称后下一步是店铺授权,就有你手机上创建的微小店名称可选的。
第三步:开通应用动态推送
这一步主要是接收订单交易状态的,用户发起支付与支付完成都有推送消息,后面我们会介绍如何处理推送。
开通推送的方法:有赞云控制台 -> 应用设置 -> 开发信息 -> 修改 -> 填写接收推送的网址即可。
环境已经准备 OK 了,你的手机上应该已经装了微小店应用了,接下来我们要发起交易,开始之前我们得准备好 SDK,如果你使用 Laravel,我封了一个包:overtrue/laravel-youzan,如果你是其它框架,那么请使用 HanSon 的封装:HanSon/youzan-sdk。当然还有一个选择,官方 SDK:youzan/open-sdk-php。
安装完 SDK,配置环境我们需要一些参数:
第一步:创建收款二维码
这一步一般是用户在你的网站选择完商品,或者在购物车点结算,你在自己网站创建完订单后,调用有赞云收银 API 创建二维码,以我的包为例(大同小异啦):
$result = \Youzan::request('youzan.pay.qrcode.create', [
'qr_type' => 'QR_TYPE_DYNAMIC', // 这个就不要动了
'qr_price' => 100, // 金额:分
'qr_name' => 'iPhone 8 plus 64G 金色', // 收款理由
'qr_source' => '102828399222', // 自定义字段,你可以设置为网站订单号
])'
得到的结果呢包含三个值:
"qr_id": "19707",
"qr_url": "https://trade.koudaitong.com/wxpay/confirmQr?qr_id=19707&kdt_id=55",
"qr_code": "data:image/png;base64,iV......"
其中 qr_id 你需要与刚才的订单绑定(这里取决于你自己的实现了,比如你在网站应该有 payments 表用于专门记录支付记录)
qr_url 呢其实就是扫码完打开的页面,qr_code 是图片内容,可以直接放到 img 的 src 中,data-url 格式。就是一个二维码图片。
用户扫码后打开一个网址完成付款。这时候你的手机 app 微小店会告诉你有新的订单。
接下来就是处理交易结果了。
第二步:主动查询订单
为啥要主动查询呢,不是有推送么,对,但是推送的时间以及成功率是无法保证的,所以我们应该主动去查询,我的做法是在交易创建完成后,定时(2秒左右)查询一次订单信息:
$payment = Payment::whereQrId('19707');
$result = Youzan::request('youzan.trades.qr.get', [
'qr_id' => $payment->qr_id,
'status' => 'TRADE_RECEIVED'
]);
if ($result['total_results'] > 0) {
$order = array_pop($result['qr_trades']);
$payment->status = Payment::STATUS_SUCCEED;
$payment->save();
}
上面我们先从自己的数据库根据 qr_id 查询交易记录得到 $payment,然后调用了有赞云 API 的二维码订单列表得到这个二维码产生的成功的交易订单。
如果得到成功交易的订单数量大于 0 (一般就一笔),就更新支付状态为成功。
反之,继续查,这里一般有一个限制,比如查10次没有交易就关闭,或者其它你觉得 OK 的策略都可以。
第三步:处理推送
这一步与其它支付的情况不太一样,因为推送过来的内容不是直接就能与你的订单关联上的,推送过来的内容中有一个 id 字段,这是有赞的订单 ID ,不是我们的订单 ID,我们先要拿这个 ID 去他们的 API 取到交易详情,然后再从交易详情得到 qr_id 才能查出我们订单的关联信息。
if ($request->get('type') == 'TRADE_ORDER_STATE'
&& $request->get('status') == 'TRADE_SUCCESS') {
$order = Youzan::request('youzan.trade.get', ['tid' => $request->id]);
$payment = Payment::WhereQrId($order['trade']['qr_id'])->first();
if ($payment && $payment->status !== self::STATUS_SUCCEED) {
$payment->status = Payment::STATUS_SUCCEED;
$payment->save();
}
}
获取交易详情 API 为 youzan.trade.get,传入的 tid 就是推送内容里的 id。二维码 ID 在交易详情的 trade 里。
那这一套流程就实现完了,个人感觉还是非常容易的,收款完成你就可以在微小店提现了。
个人觉得这一套下来接入成本非常的低,然后还有一个非常大的好处是给你省去很多开发工作,因为在手机 app 上随时有推送,以及订单管理,每天的收益统计等,很方便,当然 1% 的手续费感觉其实还好吧,毕竟你的个人站交易也大不到百万千万这样的额度去。
相关资料:
微小店:https://h5.youzan.com/v2/index/wxdpc
收银台 API: https://www.youzanyun.com/apilist/list/group_trade/pay_qrcode
交易 API: https://www.youzanyun.com/apilist/list/group_trade/trade
overtrue/laravel-youzan: overtrue/laravel-youzan
HanSon/youzan-sdk: HanSon/youzan-sdk
官方 SDK:youzan/open-sdk-php
[
](http://mystorage.qiniudn.com/data/qrcode20170719.jpg)
Original url: Access
Created at: 2018-10-10 14:27:45
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论