很多个人开发商在开发自己的项目时都会使用支付功能,但支付功能往往只对企业或个体工商户开放,这无疑成为了个人开发商的一个难点。
下面介绍的利用个人支付码和赞赏码实现无合约微信支付接口的方案来自@的无私分享,可以很好的解决这个问题。 与传统支付接口相比,个人免签支付不需要营业执照等资质,个人用户可以轻松申请和使用,更加灵活便捷。
三种免签证选择
APP监控支付码的支付结果,然后修改页面的支付结果。
第二次清算。 款项先到官方支付接口的商户,由商户为您结算。
微信插件可以全自动监控支付码的创建和支付流程,让关账变得轻而易举。
在解决问题的过程中,解决方案的选择至关重要。 尽管有很多选项可供选择,但上述选项都有一些缺点。 尽管许多人仍在使用这些解决方案,但它们并不是最佳解决方案。 因此,本文将介绍一种通过简单的技术开发实现的免签证支付方式,即第一种APP监控支付码的方式。 该方式可以有效解决支付过程中的繁琐问题,让用户享受更便捷的支付体验。
APP监控支付码的支付结果,实现免签的大致流程:
访问网址 -> 查询数据库2分钟内未支付的订单金额 -> 如果2分钟内未支付的订单金额包含与当前订单金额相同的,则需要在当前金额上加上0.01元,以区分唯一性订单 -> 用户扫描二维码支付 -> 手机APP监控该订单的支付 -> 异步发送支付金额到服务器 -> 服务器修改数据库中订单金额的支付状态 -> > 二维码扫描页面一直在轮询订单,如果发现支付状态为已支付,请修改页面支付结果->完成支付。
话不多说,让我们直接上代码。
.php
该页面用于创建订单,其中$=0.01; 表示创建0.01元的订单。
在创建订单之前,程序会查询数据库以确定是否存在当前金额的未付款订单。 若有,则需支付的金额为当前订单金额+0.01元。
为什么要这样做? 由于APP监控只能监控到款金额,无法监控订单号,因此无法区分该金额是您支付的还是他人支付的。 因此,在当前订单的有效期内,需要注意两件事。 首先,你的程序的访问量不能太高,并且不允许高并发。 适合小众、小规模、小流量的业务使用。 短时间内人流较多、订单较多,难以准确监控支付结果。
<html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0,viewport-fit=cover"> <meta charset="utf-8"> <script src="./js/jquery.min.js">script> <link rel="stylesheet" href="./css/style.css"> <title>微信赞赏码免签约支付实现原理Demotitle>head> <body> // 数据库配置 include './Db.php'; // 实例化类 $db = new DB_API($config); // 订单号 $order_num = date('Ymd').time(); // 订单金额 $order_price = 0.01; // 获取未支付订单列表 $getOrderList = $db->set_table('mqpay_order')->findAll(['order_status' => 1]); // 遍历订单 $orderNoExpire = array(); for ($i = 0; $i < count($getOrderList); $i++) { // 订单时间 $order_time = json_decode(json_encode($getOrderList[$i]))->order_time; // 订单金额 $order_money = json_decode(json_encode($getOrderList[$i]))->order_money; // 获取2分钟未支付的订单 if(countTimes(time(),strtotime($order_time)) <= 2){ // 如果存在 $orderNoExpire[] = $order_money; } } // 判断是否有2分钟未支付的订单 if(count($orderNoExpire) == 0){ $needPay = $order_price; }else{ // 获取2分钟未支付的订单的最大金额+0.01 $needPay = max($orderNoExpire) + 0.01; } // 创建订单 creatOrder($order_num,$order_price,$needPay,$db); // 创建订单 function creatOrder($order_num,$order_price,$needPay,$db){ // 订单参数 $createOrder = [ 'order_num' => $order_num, 'order_price' => $order_price, 'order_money' => $needPay, ]; // 创建 $createOrderResult = $db->set_table('mqpay_order')->add($createOrder); if($createOrderResult){ // 成功 echo ' 请识别上方赞赏码 点击其他金额输入'
输入的金额必须要完全一致
'
.$order_num.''
.$needPay.'我们通过机器人监测本次支付
支付后会立刻显示支付结果
支付后没显示支付结果请联系人工处理
微信号:xxx
.php
用于在订单页面实时监控支付结果。 每2秒检查一次数据库,获取订单的支付结果。 如果2分钟后没有付款,查询将停止。
// 页面编码 header("Content-type:application/json"); // 数据库配置 include './Db.php'; // 实例化类 $db = new DB_API($config); // 获取订单号和支付金额 $order_num = $_GET['order_num']; $order_money = $_GET['order_money']; // 根据订单号和订单金额来查询支付结果 $getOrderPayStatus = $db->set_table('mqpay_order')->find(['order_num'=>$order_num,'order_money'=>$order_money]); // 判断支付结果 if($getOrderPayStatus){ // 支付状态 $order_status = json_decode(json_encode($getOrderPayStatus))->order_status; if($order_status == 2){ // 支付成功 $payResult = array( 'code' => 200, 'msg' => '支付成功' ); }else{ // 未支付 $payResult = array( 'code' => 202, 'msg' => '未支付' ); } }else{ // 无结果 $payResult = array( 'code' => 201, 'msg' => '未支付' ); } // 返回JSON echo json_encode($payResult,JSON_UNESCAPED_UNICODE);
.php
这是一个异步回调。 APP监听软件需要配置该文件的URL以及传递的参数,将监控到的金额POST到您的服务器上,然后修改数据库的支付结果,以达到支付回调的目的。
// 页面编码 header("Content-type:application/json"); // 原文 $orderMsg = $_GET['orderMsg']; // 数据库配置 include './Db.php'; // 实例化类 $db = new DB_API($config); // 订单金额、需支付的金额、通知原文、db实例 updateOrder($orderMsg,$db); // 修改支付结果 function updateOrder($orderMsg,$db){ // 截取 // 示例:二维码赞赏到账1.00元 // 截取【到账】后面的 $money_1 = substr($orderMsg, strripos($orderMsg, "到账") + 6); // 截取【元】前面的 $money_2 = substr($money_1, 0, strrpos($money_1, "元")); // 更新订单 $updateOrderResult = $db->set_table('mqpay_order')->update(['order_status'=>1,'order_money'=>$money_2],['order_status'=>2,'order_paytime'=>time(),'order_msg'=>$orderMsg]); if($updateOrderResult){ // 成功 $ret = array( 'code' => 200, 'msg' => '支付成功', 'order_num' => $order_num, 'order_money' => $money_2, 'order_msg' => $orderMsg ); }else{ // 失败 $ret = array( 'code' => 200, 'msg' => '支付失败', 'order_num' => $order_num ); } } // 返回JSON echo json_encode($ret,JSON_UNESCAPED_UNICODE);
完整代码
以上三个文件为核心代码,仅用于技术分析和实现原理。 完整代码涉及样式、图片、数据库操作类、数据库表SQL语句、监控APP源码和安装包。
监控APP配置
监控APP配置也相当简单。 您只需将.php在线URL配置到APP即可。
具体操作请看截图:
1、打开APP,选择【发送通道】,点击【 】,选择【GET请求】,输入.php所在服务器的URL,以下参数填写[=[msg]]。
2、选择【转发规则】,点击【应用】,添加转发规则,【APP包名称】选择【是】,包名称输入【com..mm】,选择的发送通道为您创建的通道在上一步中。 只需从下面的模板中选择通知内容即可。
至此,APP基本完成配置,然后开启APP自动启动,并添加电池优化白名单,保证APP能够始终在后台运行而不被杀死。
获取鉴赏码
为什么使用鉴赏码而不是支付码? 因为支付码更容易受风险控制,所以支付码更适合面对面扫描收款,但不适合在线远程收款,因为你的每一次支付都会记录支付IP地址、地点和信息。其他信息。 扫码如果数量过高,系统会判断为远程支付,很容易触发风控。 鉴赏码用于网上鉴赏,比支付码相对安全。
得到自己的欣赏代码后,只需将欣赏代码的部分剪掉,替换源码中的zsm.jpg文件即可。 升值码可以设置升值指引,可以将指引修改为【请点击其他金额进入】来引导用户。
支付页面
源码下载
该源代码只有一个页面,没有后端。 只适合个人单页部署或者研究、学习、二次开发。 它不适合开箱即用。 当然,如果你有一些基础知识,也是可以开箱即用的。 您可以上传到服务器并进行修改。 数据库配置,导入数据库表,配置鉴赏码,准备APP异步回调也可以用于单页收款。 只要你的金额固定,就可以开箱即用。 下载链接:
结论
免签证支付的优点是不需要繁琐的签字流程。 开发者只需填写一些基本信息即可使用。 这对于个人开发者来说非常方便,因为他们不需要拥有营业执照或其他资质,也不需要与支付提供商签约。 这样,个人开发者就可以更自由地使用支付接口,而不必担心无法申请或使用不方便。