微信jsapi支付php环境,微信公众号支付(jsapi支付)
微信支付有多种支付场景,有扫码支付、公众号支付、H5 支付、APP 应用支付等。
之前有写过一篇关于扫码支付的文章,今天,写一下关于公众号支付(jsapi支付)的一些知识。
我们在微信支付平台下载开发文档,其中,刷卡支付、公众号支付、扫码支付是统一放在一个压缩包里,压缩包为:WxpayAPI_php_v3。
将压缩包解压后,打开目录 example,其中,有二个文件是需要我们写业务代码的,一个jsapi.php 文件,这个文件主要用于获取用户的 openid 和传入支付的订单信息;
另一个文件是 notify.php,这个文件是支付成功后的回调文件,我们需要在这个文件里,写入支付成功后的业务逻辑,如更新订单状态为“已支付”。
一定要在支付平台设置支付授权目录,授权目录为要访问的文件所在目录,如:www.域名.com/zhifu/example/
实际操作:
1、当用户到达支付页面后,我们可以让用户点击支付按钮,当点击这个支付按钮后,我们将 order_id 这个参数传入到 jsapi.php 文件,在 jsapi.php 文件中,我们接收传入的 order_id ,重新查询订单信息。
2、我们将订单信息的关键内容,如需要支付的金额,产品的名称,放入到微信的参数中。
3、点击底部的支付按钮,唤醒微信的支付功能。
4、支付成功后,微信会访问到之前配置的回调地址文件。
jsapi.php 文件代码:
ini_set('date.timezone','Asia/Shanghai');
//error_reporting(E_ERROR);
require_once "../lib/WxPay.Api.php";
require_once "WxPay.JsApiPay.php";
require_once 'log.php';
//连接数据库
$servername = "localhost";
$username = "****";
$password = "****";
if (!$link = mysql_connect($servername, $username, $password)) {
echo 'Could not connect to mysql';
exit;
}
if (!mysql_select_db('****', $link)) {
echo 'Could not select database';
exit;
}
//根据传入的 order_id 获取订单信息
$order_id = $_GET['order_id'];
$sql = "SELECT * FROM v9_chongzhi_order where id={$order_id} ";
$result = mysql_query($sql, $link);
$order_info = mysql_fetch_assoc($result);
if($order_info['is_pay']==1){//如果订单已经支付,则直接跳走
header("Location:/index.php?m=member&c=index&from=mobile");
}
//初始化日志
$logHandler= new CLogFileHandler("../logs/".date('Y-m-d').'.log');
$log = Log::Init($logHandler, 15);
//打印输出数组信息
function printf_info($data)
{
foreach($data as $key=>$value){
echo "$key : $value
";
}
}
//①、获取用户openid
$tools = new JsApiPay();
$openId = $tools->GetOpenid();
//②、统一下单
$input = new WxPayUnifiedOrder();
$input->SetBody("充值");//这里传入的是商品信息
$input->SetAttach("chongzhi");
$input->SetOut_trade_no($order_info['sn']);//这里传入的是订单号
$input->SetTotal_fee($order_info['chongzhi_money']);//这里传入的是需要支付的金额
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag("chongzhi");
$input->SetNotify_url("http://www.域名.com/zhifu/weixin/example/gongzhonghao_notify.php");
$input->SetTrade_type("JSAPI");
$input->SetOpenid($openId);
$order = WxPayApi::unifiedOrder($input);
echo '下单支付单信息
';
//printf_info($order_info);
echo "订单号 : {$order_info['sn']}
";
echo "充值金额 : ".($order_info['chongzhi_money']/100)." 元
";
$jsApiParameters = $tools->GetJsApiParameters($order);
//获取共享收货地址js函数参数
$editAddress = $tools->GetEditAddressParameters();
//③、在支持成功回调通知中处理成功之后的事宜,见 notify.php
/**
* 注意:
* 1、当你的回调地址不可访问的时候,回调通知会失败,可以通过查询订单来确认支付是否成功
* 2、jsapi支付时需要填入用户openid,WxPay.JsApiPay.php中有获取openid流程 (文档可以参考微信公众平台“网页授权接口”,
* 参考http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html)
*/
?>
微信支付样例-支付
//调用微信JS api 支付
function jsApiCall()
{
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
<?php echo $jsApiParameters; ?>,
function(res){
WeixinJSBridge.log(res.err_msg);
//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();
}
}
//获取共享地址
function editAddress()
{
WeixinJSBridge.invoke(
'editAddress',
<?php echo $editAddress; ?>,
function(res){
var value1 = res.proviceFirstStageName;
var value2 = res.addressCitySecondStageName;
var value3 = res.addressCountiesThirdStageName;
var value4 = res.addressDetailInfo;
var tel = res.telNumber;
//alert(value1 + value2 + value3 + value4 + ":" + tel);
}
);
}
window.onload = function(){
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', editAddress, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', editAddress);
document.attachEvent('onWeixinJSBridgeReady', editAddress);
}
}else{
editAddress();
}
};
该笔订单支付金额为<?php echo $order_info['chongzhi_money']/100; ?>元
<?php if($order_info['is_pay']==0){?>立即支付<?php } ?>
返回个人中心
notify.php 文件代码:
ini_set('date.timezone','Asia/Shanghai');
error_reporting(E_ERROR);
require_once "../lib/WxPay.Api.php";
require_once '../lib/WxPay.Notify.php';
require_once 'log.php';
//初始化日志
$logHandler= new CLogFileHandler("../logs/".date('Y-m-d').'.log');
$log = Log::Init($logHandler, 15);
class PayNotifyCallBack extends WxPayNotify
{
//查询订单
public function Queryorder($transaction_id)
{
$input = new WxPayOrderQuery();
$input->SetTransaction_id($transaction_id);
$result = WxPayApi::orderQuery($input);
Log::DEBUG("query:" . json_encode($result));
if(array_key_exists("return_code", $result)
&& array_key_exists("result_code", $result)
&& $result["return_code"] == "SUCCESS"
&& $result["result_code"] == "SUCCESS")
{
//在这里写关于支付后的业务逻辑,如更新订单状态
$servername = "localhost";
$username = "******";
$password = "******";
if (!$link = mysql_connect($servername, $username, $password)) {
echo 'Could not connect to mysql';
exit;
}
if (!mysql_select_db('*****', $link)) {
echo 'Could not select database';
exit;
}
$order_sn = $result['out_trade_no'];
$update_order_sql = "update chongzhi_order set pay_time={$result['time_end']},pay_amount={$result['total_fee']},is_pay=1 where sn='{$order_sn}' ";//echo $sql;
$update_order_result = mysql_query($update_order_sql, $link);
$order_sql = "SELECT * FROM chongzhi_order where sn='{$order_sn}' ";//echo $sql;
$order_result = mysql_query($order_sql, $link);
$order_info = mysql_fetch_assoc($order_result);
$chongzhi_money = round($result['total_fee']/100,2);
$update_amount_sql = "update member set amount=amount+{$chongzhi_money} where userid={$order_info['user_id']} ";//echo $sql;
$update_amount_result = mysql_query($update_amount_sql, $link);
return true;
}
return false;
}
//重写回调处理函数
public function NotifyProcess($data, &$msg)
{
Log::DEBUG("call back:" . json_encode($data));
$notfiyOutput = array();
if(!array_key_exists("transaction_id", $data)){
$msg = "输入参数不正确";
return false;
}
//查询订单,判断订单真实性
if(!$this->Queryorder($data["transaction_id"])){
$msg = "订单查询失败";
return false;
}
return true;
}
}
Log::DEBUG("begin notify");
$notify = new PayNotifyCallBack();
$notify->Handle(false);
结尾再次提醒:一定要在支付平台设置支付授权目录,授权目录为要访问的文件所在目录,如:www.域名.com/zhifu/example/
微信jsapi支付php环境,微信公众号支付(jsapi支付)相关推荐
- 微信公众号H5页面支付JSAPI
1:在微信环境下,我们需要获取到code,拿code去获取openid,在获取openid的时候有2种参数分别是:snsapi_base和snsapi_userinfo,snsapi_base只为获取 ...
- C# MVC 微信支付教程系列之公众号支付
微信支付教程系列之公众号支付 今天,我们接着讲微信支付的系列教程,前面,我们讲了这个微信红包和扫码支付.现在,我们讲讲这个公众号支付.公众号支付的应用环境常见的用户通过公众号,然后再通过公众号里面 ...
- PHP 支付PC端扫码支付、APP接口调起支付宝支付、微信公众号接入支付宝支付
第一:第三方支付原理 第二:支付接口申请流程 地址:https://docs.open.alipay.com/270/105899/ : 参考地址:https://blog.csdn.net/nove ...
- 微信公众号:支付宝支付
微信公众号:支付宝支付 微信公众号:支付宝支付 由于支付宝月微信是两个对立的企业,支付宝想介入微信的充值,微信发现就将其规避,在支付宝与微信博弈的过程中,双方一直是处于你争我赶的地步. 微信公众号接入 ...
- php 微信支付闪了一下,php,_微信公众号JS API支付,安卓没有效果(会闪一下就消失了),php - phpStudy...
微信公众号JS API支付,安卓没有效果(会闪一下就消失了) 代码如下,ios可以支付,但是到安卓手机上就会出现微信支付读条(那三个点),然后就消失了,没有跳出输入密码支付的界面.... //调用微信 ...
- 微信公众号认证及支付开通流程
记录一下公众号认证以及支付开通流程··· 微信认证流程官方链接==> http://kf.qq.com/product/weixinmp.html#hid=97 支付开通流程==> htt ...
- 微信小程序获取并展示公众号推文
微信小程序获取并展示公众号推文 获取公众号access_token(开发环境) IP白名单设置 获取access_token 小程序前端展示 素材导入云数据库 云函数读取展示 注:笔者是小程序菜鸟,代 ...
- python pc微信 接收信息_GitHub - ericadver/WechatPCAPI: 微信PC版的API接口,可通过Python调用微信获取好友、群、公众号列表,并收发消息等功能。...
WechatPCAPI 微信PC版的API接口,可通过Python调用微信获取好友.群.公众号列表,并收发消息等功能.可用于二次开发在线微信机器人.微信消息监控.群控软件.开发界面作多个微信控制软件等 ...
- python 微信公众号网页接口调用_GitHub - micsem00/WechatPCAPI: 微信PC版的API接口,可通过Python调用微信获取好友、群、公众号列表,并收发消息等功能。...
WechatPCAPI 微信PC版的API接口,可通过Python调用微信获取好友.群.公众号列表,并收发消息等功能.可用于二次开发在线微信机器人.微信消息监控.群控软件.开发界面作多个微信控制软件等 ...
- python的读取微信界面_GitHub - lchb000/WechatPCAPI: 微信PC版的API接口,可通过Python调用微信获取好友、群、公众号列表,并收发消息等功能。...
WechatPCAPI 微信PC版的API接口,可通过Python调用微信获取好友.群.公众号列表,并收发消息,接受转账.好友请求.入群请求,群管理等功能.可用于二次开发在线微信机器人.微信消息监控. ...
最新文章
- Magento 如何在注册页面调出Address Information
- Go 语言编程 — 程序结构
- vcenter6.0+EXSI6.0 部署虚拟机win10,安装vmtools后不能显示桌面
- python 建站需求_python建站基础环境配置
- MFC socket网络编程(流程示例)
- hbase获取表信息_HBase的读写和javaAPI的使用
- CentOS 6.4 命令行 安装 VMware Tools
- PreScan传感器(二)——TIS传感器
- ArcGIS中利用DEM制作山体阴影立体晕渲图调色附数据和在线视频教程
- c语言经典程序技能高考,计算机类技能高考介绍
- 微信小程序轮播图实现详解
- 航天宏图PIE-SAR软件高分3数据预处理流程
- XTU 1205 Range
- 2019年天梯赛第一阶段(1-8)全解
- 腾讯 2015年校招 笔试 附加题
- hr员工数据分析(实战)
- 【数据挖掘】《数据分析与数据挖掘》--天津大学公开课
- 名图怎么弄云服务器_名图怎么弄云服务器
- Linux内核编译的选项 m,编译内核选项!~~
- LayIM 3.9.1与ASP.NET SignalR实现Web聊天室快速入门(五)之使用RabbitMQ缓存消息
热门文章
- java-php-python-ssm企业产品在线展示销售平台计算机毕业设计
- 算法设计与分析[贪心]-汽车加油问题
- 酷派7295a官方底包优化刷机包 加入root权限省电稳定
- fragment 淡入淡出_Activity和Fragment的转场动画
- 基于Sqli-Labs靶场的SQL注入-第五关(重点讲双查询注入)
- 英伟达CEO黄仁勋对话OpenAI首席科学家,谈GPT-4及未来大模型
- PL/SQL删除锁表的进程
- 微信公众平台推广运营
- linux批量检查端口脚本,telnet批量检测端口状态(linux)
- KWS Water System Standard Rendering 教程