请事先配置好相关

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相关推荐

  1. 微信支付之Native支付H5支付JSAPI支付退款

    参考文档: https://mp.weixin.qq.com/mp/homepage?__biz=MzI3OTIwNDU0MA==&hid=2&sn=efa76e36c5b580e41 ...

  2. 微信支付,JSAPI支付,APP支付,H5支付,Native支付,小程序支付功能详情以及回调处理

    一.支付相关文档地址 支付wiki:https://pay.weixin.qq.com/wiki/doc/apiv3/index.shtml 支付api: https://pay.weixin.qq. ...

  3. 实现微信支付(Native支付),使用WebSocket进行推送——3.创建支付订单,接收付款结果

    实现微信支付(Native支付),使用WebSocket进行推送--3.创建支付订单,接收付款结果 注:本实验使用springboot框架 一.创建订单 1.流程 2.创建支付订单所需参数 2. AP ...

  4. 实现微信支付(Native支付),使用WebSocket进行推送——1.简单介绍

    实现微信支付(Native支付),使用WebSocket进行推送--1.简单介绍 一.实现逻辑 1.由于本人的项目是web版本的,因此选用native实现微信支付,在网站生成支付二维码,然后用户在手机 ...

  5. 实现微信支付(Native支付),使用WebSocket进行推送 ——4.配置SpringBoot支持WebSocket,推送结果

    实现微信支付(Native支付),使用WebSocket进行推送 --4.配置SpringBoot支持WebSocket,推送结果 依赖 <dependency><groupId&g ...

  6. 手机网站支付转Native支付--Android

    背景 为了节约开发成本,很多Native-H5混合App采用手机网站支付的方式去实现支付模块.但手机网站支付的网络依赖比较严重,也通常需要经过更多的验证,这种种原因导致手机网站支付的成功率比Nativ ...

  7. 微信支付之Native支付和JSAPI支付详细开发步骤!

    目录标题 微信支付之扫码Native支付与JSAPI支付 进入主题 一.Native支付 1. 使用场景 2. 开发步骤 3. 开始开发 二.JSAPI支付 1. 使用场景 2. 开发步骤 3. 开始 ...

  8. 【Java 实现微信支付、Native 支付流程】,从编写代码到支付成功,一步到位!

    文章目录 1. 项目环境介绍 2. 微信支付文档 2.1 业务流程说明 3. 准备信息 3.1 微信公众账号如何获取? 3.2 商户号如何获取? 3.3 API密钥如何获取? 3.4 准备工具类 4. ...

  9. PC网站微信扫码支付之Native支付(模式二)

    简介 Native支付是指商户系统按微信支付协议生成支付二维码,用户再用微信"扫一扫"完成支付的模式.该模式适用于PC网站.实体店单品或订单.媒体广告支付等场景. Native支付 ...

最新文章

  1. cs python课程 加州大学_B站的CS课程整理 搬运
  2. 跟alex学python_跟着Alex学习python
  3. Python-OpenCV 处理视频(四): 运动检测
  4. 使用 C# + SQLite + PetaPoco + django 快速打造桌面程序
  5. vue 父组件传子组件数值,父值变更子获取的值没有变的问题
  6. php 跳转到另外一个php,PHP: 其他变更 - Manual
  7. 你不知道的《阿里巴巴Java开发手册》背后故事
  8. linux机器不能上网,Deepin Linux 无法上网
  9. 怎样解决编程语言之间的差异性问题?
  10. 《深入理解OSGi:Equinox原理、应用与最佳实践》笔记_1_运行最简单的bundlehelloworld...
  11. 扩展二叉树 (根据特殊的前序遍历建树)
  12. kubernetes管理之使用yq工具截取属性
  13. Windows Phone 8 蓝牙编程
  14. linux pm2功能说明,PM2介绍及简易使用手册
  15. Django下载Excel文件
  16. 开发常用词汇表(带音标)
  17. iPad忘记密码时恢复出厂设置
  18. 定时任务管理系统 gocron
  19. win10下完美卸载ubuntu
  20. 第六章 Linux实际操作——实用指令

热门文章

  1. 爬虫君子协议-robots.txt协议
  2. kafka扩容数据自动重分配脚本
  3. Kubernetes四探(官网Tutorials的学习)
  4. Android测试驱动开发实践
  5. 微型计算机基础理论怎么学,微型计算机原理(孟辉)
  6. Vue3 + Ant Design Vue 可搜索 自定义字段 a-tree
  7. 黑马JAVA P44 猜数字游戏
  8. 视频号5种提高曝光量的技巧
  9. 2022.05面试总结
  10. 用python的gui界面设计签名_Python GUI Tkinter简单实现个性签名设计