微信 jsapi支付 和 Native支付 php
请事先配置好相关
appid
商户mchid
支付成功回调地址/签名方式
商户密钥key AppSecret
证书路径地址等
一、JSAPI
1、下单
// jsapi统一下单接口public function buyservice(){$URL = "回调地址";// 生成订单号 存储用于后期判断$orderCode = $this->setOrderCode();// $fee = '0.01';$fee = 100;$get = 'get参数';$saveArr = array('paySta' => 4,'phone' => $get['phone'],'whichid' => $get['whichid'],'order' => $orderCode,'time' => date('YmdHis',time()),'money' => $fee,);$saveOrder = M('wx_order')->add($saveArr);$project = "嘻唰唰服务";$tools = new \JsApiPay();$openId = $tools->GetOpenid('');//②、统一下单$input = new \WxPayUnifiedOrder();$input->SetBody($project);$input->SetAttach("xss_".$saveOrder);$input->SetOut_trade_no($orderCode);$input->SetTotal_fee($fee*100);$input->SetTime_start(date("YmdHis"));$input->SetTime_expire(date("YmdHis", time() + 600));$input->SetGoods_tag($project);$input->SetNotify_url($URL);$input->SetTrade_type("JSAPI");$input->SetOpenid($openId);$config = new \WxPayConfig();$order = \WxPayApi::unifiedOrder($config, $input);// echo '<font color="#f00"><b>统一下单支付单信息</b></font><br/>';// dump($order);$jsApiParameters = $tools->GetJsApiParameters($order);// dump($jsApiParameters);//获取共享收货地址js函数参数// $editAddress = $tools->GetEditAddressParameters();$this -> assign(array('data' => $jsApiParameters,'project' => $project,//'pyid' => $pyid//'address' => $editAddress));$this -> display();}
2、调起支付
<html>
<head><meta http-equiv="content-type" content="text/html;charset=utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/> <title>{$project}-服务购买</title><script type="text/javascript">//调用微信JS api 支付function jsApiCall(){WeixinJSBridge.invoke('getBrandWCPayRequest',{$data},function(res){WeixinJSBridge.log(res.err_msg);if(res.err_msg == "get_brand_wcpay_request:ok"){ var project = '{$project}';alert('恭喜!服务购买成功')。。。其他操作 }else if(res.err_msg == "get_brand_wcpay_request:cancel"){alert("已取消支付!"); }else{ alert("支付失败!");//alert(res.err_code+res.err_desc+res.err_msg) } });}function callpay(){if (typeof WeixinJSBridge == "undefined"){if( document.addEventListener ){document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);}else if (document.attachEvent){document.attachEvent('WeixinJSBridgeReady', jsApiCall); document.attachEvent('onWeixinJSBridgeReady', jsApiCall);}}else{jsApiCall();}}callpay();</script>
</head>
<body></body>
</html>
3、回调函数
public function notify(){// 获取微信回调的数据 蒸煮$notifiedData = file_get_contents('php://input');//XML格式转换$xmlObj = $this->xmlToArray($notifiedData);#测试
// $xmlObj = '{"appid":"wx123ce1d155d54456",
// "attach":"xss_52",
// "bank_type":"OTHERS",
// "cash_fee":"1",
// "fee_type":"CNY",
// "is_subscribe":"Y",
// "mch_id":"1987654312",
// "nonce_str":"ol6r9sop1pjwmhfzkphjzv7a4a3w988j",
// "openid":"oD7-Kt5r4V_IoMJ8qCMwm6YoVIjY",
// "out_trade_no":"233748542be9618317b865cb2ed9cdcb",
// "result_code":"SUCCESS",
// "return_code":"SUCCESS",
// "sign":"56BB33DEB13081C4912876DDAF82ECDB",
// "time_end":"20220118102427",
// "total_fee":"1000",
// "trade_type":"NATIVE","transaction_id":"4200001409202201183558127476"}';
// $xmlObj = json_decode($xmlObj,true);// 日志M('order_ce')->add(array('tes' => json_encode($xmlObj),'time' => date('Y-m-d H:i:s',time()),));// 当支付通知返回支付成功时if ($xmlObj['return_code'] == "SUCCESS" && $xmlObj['result_code'] == "SUCCESS") {// 支付成功!//验签名 这里是要把微信返给我们的所有值,先删除sign的值,其他值 按ASCII从小到大排序,md5加密+‘key’;$attach = $xmlObj['attach'];// dump($attach);// 并校验返回的订单是否与商户侧的订单一致if (!$attach) {$returnArr = array('return_code' => 'SUCCESS','return_msg' => 'no attach');return $this->arrayToXml($returnArr);}if(substr($attach,0,4)=='whx_'){$id = ltrim($attach,"whx_");$orderMsg = M('wx_order')->where(array('id'=>$id))->find();if ($orderMsg['is_pay'] == 1) {$returnArr = array('return_code' => 'SUCCESS','return_msg' => 'OK');return $this->arrayToXml($returnArr);}// 订单号不同if ($orderMsg['order'] != $xmlObj['out_trade_no']) {$returnArr = array('return_code' => 'SUCCESS','return_msg' => 'SUCCESS');return $this->arrayToXml($returnArr);}// 金额不同if ($xmlObj['total_fee'] != $orderMsg['money']*100) {$returnArr = array('return_code' => 'SUCCESS','return_msg' => 'SUCCESS');return $this->arrayToXml($returnArr);}# 其他具体操作}}elseif ($xmlObj['return_code'] == 'FAIL') {$returnArr = array('return_code' => 'SUCCESS','return_msg' => '');return $this->arrayToXml($returnArr);}}
二 、 扫码支付
1、统一下单 二维码生成
public function payPage(){$mon = I('get.payM');$get = I('get.');$userData = array('phone' => $get['phone'],'whichid' =>$get['whichid'],);$payUrl = $this->getWxpay($mon,$userData);// $payUrl = 'weixin://wxpay/bizpayurl?pr=PeIGQxUz';$this->assign(array('payUrl'=>$payUrl));return $this->display();}// 生成微信支付码public function getWxpay($fee,$userData){$api = new \Api\Controller\WxpayController();$res = $api->native($fee,$userData);return $res;}// 扫码支付public function native($fee = 0.01,$userData){// $fee = 0.01;$URL = "回调地址";// 生成订单号 存储用于后期判断$orderCode = $this->setOrderCode();$saveArr = array('paySta' => 4,'phone' => $userData['phone'],'whichid' => $userData['whichid'],'order' => $orderCode,'time' => date('YmdHis',time()),'money' => $fee,);$saveOrder = M('wx_order')->add($saveArr);$post = I('post.');$notify = new \NativePay();$input = new \WxPayUnifiedOrder();$input->SetBody("服务购买");$input->SetAttach('whx_'.$saveOrder);$input->SetOut_trade_no($orderCode); //订单号$input->SetTotal_fee($fee*100); //金钱$input->SetTime_start(date("YmdHis"));$input->SetTime_expire(date("YmdHis", time() + 600));$input->SetGoods_tag("服务购买");$input->SetNotify_url($URL); //回调函数$input->SetTrade_type("NATIVE"); //扫码支付$product_id = $saveOrder . date('YmdHis',time());$input->SetProduct_id($product_id); //商品号$result = $notify->GetPayUrl($input);$url2 = $result["code_url"];return $url2;}
2、二维码输出
<div style="width:100%;text-align:center;"><img style="width:150px; border-radius: 8px;background-color:#ff4401;" src="/Public/Wxpay/example/qrcode.php?data={$payUrl}" />
</div>
3、二维码生成函数
require_once 'phpqrcode/phpqrcode.php';
$url = urldecode($_GET["data"]);
if(substr($url, 0, 6) == "weixin"){QRcode::png($url);
}else{header('HTTP/1.1 404 Not Found');
}
4、回调同上
使用的sdk版本:3.0.10
微信 jsapi支付 和 Native支付 php相关推荐
- 微信支付之Native支付H5支付JSAPI支付退款
参考文档: https://mp.weixin.qq.com/mp/homepage?__biz=MzI3OTIwNDU0MA==&hid=2&sn=efa76e36c5b580e41 ...
- 微信支付,JSAPI支付,APP支付,H5支付,Native支付,小程序支付功能详情以及回调处理
一.支付相关文档地址 支付wiki:https://pay.weixin.qq.com/wiki/doc/apiv3/index.shtml 支付api: https://pay.weixin.qq. ...
- 实现微信支付(Native支付),使用WebSocket进行推送——3.创建支付订单,接收付款结果
实现微信支付(Native支付),使用WebSocket进行推送--3.创建支付订单,接收付款结果 注:本实验使用springboot框架 一.创建订单 1.流程 2.创建支付订单所需参数 2. AP ...
- 实现微信支付(Native支付),使用WebSocket进行推送——1.简单介绍
实现微信支付(Native支付),使用WebSocket进行推送--1.简单介绍 一.实现逻辑 1.由于本人的项目是web版本的,因此选用native实现微信支付,在网站生成支付二维码,然后用户在手机 ...
- 实现微信支付(Native支付),使用WebSocket进行推送 ——4.配置SpringBoot支持WebSocket,推送结果
实现微信支付(Native支付),使用WebSocket进行推送 --4.配置SpringBoot支持WebSocket,推送结果 依赖 <dependency><groupId&g ...
- 手机网站支付转Native支付--Android
背景 为了节约开发成本,很多Native-H5混合App采用手机网站支付的方式去实现支付模块.但手机网站支付的网络依赖比较严重,也通常需要经过更多的验证,这种种原因导致手机网站支付的成功率比Nativ ...
- 微信支付之Native支付和JSAPI支付详细开发步骤!
目录标题 微信支付之扫码Native支付与JSAPI支付 进入主题 一.Native支付 1. 使用场景 2. 开发步骤 3. 开始开发 二.JSAPI支付 1. 使用场景 2. 开发步骤 3. 开始 ...
- 【Java 实现微信支付、Native 支付流程】,从编写代码到支付成功,一步到位!
文章目录 1. 项目环境介绍 2. 微信支付文档 2.1 业务流程说明 3. 准备信息 3.1 微信公众账号如何获取? 3.2 商户号如何获取? 3.3 API密钥如何获取? 3.4 准备工具类 4. ...
- PC网站微信扫码支付之Native支付(模式二)
简介 Native支付是指商户系统按微信支付协议生成支付二维码,用户再用微信"扫一扫"完成支付的模式.该模式适用于PC网站.实体店单品或订单.媒体广告支付等场景. Native支付 ...
最新文章
- cs python课程 加州大学_B站的CS课程整理 搬运
- 跟alex学python_跟着Alex学习python
- Python-OpenCV 处理视频(四): 运动检测
- 使用 C# + SQLite + PetaPoco + django 快速打造桌面程序
- vue 父组件传子组件数值,父值变更子获取的值没有变的问题
- php 跳转到另外一个php,PHP: 其他变更 - Manual
- 你不知道的《阿里巴巴Java开发手册》背后故事
- linux机器不能上网,Deepin Linux 无法上网
- 怎样解决编程语言之间的差异性问题?
- 《深入理解OSGi:Equinox原理、应用与最佳实践》笔记_1_运行最简单的bundlehelloworld...
- 扩展二叉树 (根据特殊的前序遍历建树)
- kubernetes管理之使用yq工具截取属性
- Windows Phone 8 蓝牙编程
- linux pm2功能说明,PM2介绍及简易使用手册
- Django下载Excel文件
- 开发常用词汇表(带音标)
- iPad忘记密码时恢复出厂设置
- 定时任务管理系统 gocron
- win10下完美卸载ubuntu
- 第六章 Linux实际操作——实用指令