在一星期之前吧,我开始接触微信,最微信支付,最开始也是一脸懵逼,还好吧,我请教大神,完美解决支付问题,下面直接上干货。
首先要准备微信支付模块,就是微信支付宝,官方是一个zip压缩文件
WxpayAPI_php_v3.zip
然后解压放在项目根路径也可以。
如果说你是只需要绑定一个商户
const APPID = 'xxxxxxxx';
const MCHID = 'xxxxxxxx';
const KEY = 'xxxxxxxxx';
const APPSECRET = 'xxxxxxxxx';
你的微信配置文件可以写死 文件在微信支付模块lib文件夹下 WxPay.Config.php
主要的配置实在微信支付模块example下 jsapi.php 这是最重要的文件 我们的主要操作都是在这里面
ini_set('date.timezone','Asia/Shanghai');
ini_set('display_errors','Off');
error_reporting(E_ERROR);
require_once '../../../tp5/mydatabase.php';
require_once "../lib/WxPay.Api.php";
require_once "WxPay.JsApiPay.php";
require_once 'log.php';
最开始我们要引入配置支付文件 楼主给支付配置文件起的名字叫做mydatabases.php 楼主的微信支付文件夹是两层所以是../../../
const USERNAME=USERNAME;
const PASSWORD=PASSWORD;
const DATABASE=DATABASE;
先设定几个变量 楼主是查数据库去取APPID APPSECRET KEY MCHID
//数据库连接
$conn = mysqli_connect('localhost',USERNAME,PASSWORD);
if ($conn) {
$db = mysqli_select_db($conn,DATABASE);
if ($db) {
mysqli_set_charset($conn,'utf8');
$sql = 'select * from activity where activity_id = '.$_COOKIE["activity_id"].'';
$result = mysqli_query($conn,$sql);
if ($result) {
while ($row = mysqli_fetch_array($result)) {
$fee = $row["activity_paymoney"];
$body = $row["activity_title"];
//var_dump($row);
}
} else {
echo '数据库查询失败';
}
} else {
echo '链接数据库';
}
} else {
echo '登陆数据库失败';
}
所以接下来查询数据库
$tools = new JsApiPay();
$openId = $tools->GetOpenid();
①、获取用户openid
$input = new WxPayUnifiedOrder();
$input->SetBody($body);
$input->SetAttach($_COOKIE["activity_id"]);
$input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));
$input->SetTotal_fee($fee*100);
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis",time() + 600));
$input->SetGoods_tag("test");
$input->SetNotify_url(MYMYURL."/wxpay/wxpay/example/notify.php");
$input->SetTrade_type("JSAPI");
$input->SetOpenid($openId);
$order = WxPayApi::unifiedOrder($input);
$jsApiParameters = $tools->GetJsApiParameters($order);
②、统一下单 一定要配置SetNotify_url SetTime_expire-》600是指即时到账 如果希望时间晚点到账 ,可以调整数字大小
mysqli_close($conn);
数据库关闭
微信支付var html = document.querySelector('html');
html.style.fontSize = html.offsetWidth / 7.2 + 'px';
addEventListener('resize', function() {
html.style.fontSize = html.offsetWidth / 7.2 + 'px';
}, false);
//调用微信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);
if (res.err_msg == "get_brand_wcpay_request:ok") {
window.location.href = "/tp5/public/users/index/index?id="+$.cookie('activity_id')+"&olduid="+$.cookie('openid');
} else {
alert('取消支付');
window.location.href = "/tp5/public/users/index/index?id="+$.cookie('activity_id')+"&olduid="+$.cookie('openid');
}
}
);
}
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 cancel(){
// window.history.go(-1);
window.location.href = "/tp5/public/users/index/index?id="+$.cookie('activity_id')+"&olduid="+$.cookie('openid');
}
支付的自定义html
接下来是notify.php文件 这个文件主要是修改数据库状态
require_once '../../../tp5/mydatabase.php';
require_once "../lib/WxPay.Api.php";
require_once '../lib/WxPay.Notify.php';
require_once 'log.php';
require_once 'Tixian.php';
引入数据库文件配置
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;
}
//从这里开始链接数据库
$_COOKIE['openid1']=$data['openid'];
$_COOKIE['activity_id1']=$data['attach'];
//修改数据的微信订单和付款时间
//连接数据库
$conn=mysqli_connect('localhost',USERNAME,PASSWORD);
mysqli_select_db($conn,DATABASE);
mysqli_set_charset($conn,'utf8');//设置字符集
//准备sql语句
$paymoney="select * from activity where activity_id='{$data['attach']}'";//查询活动金额
$paymoneys=mysqli_query($conn,$paymoney);
while ($row = mysqli_fetch_array($paymoneys)) {
$fee = $row["activity_paymoney"];
}
$sql="update users set pay_wx_order='{$data['transaction_id']}',pay_time='{$data['time_end']}',money_self={$fee},state=1 where openid='{$data['openid']}' and activity_id='{$data['attach']}'";
$result=mysqli_query($conn,$sql);
//======把支付数据写入数据库开始==============================================-
$chaxun="select * from tixian where openid='{$data['openid']}' and activity_id='{$data['attach']}'";
$chaxuns=mysqli_query($conn,$chaxun);
$chaxunss=mysqli_fetch_array($chaxuns);
//执行插入数据
if($chaxunss){
}else{
$time=date('Y-m-d H:i:s',time());
$tixian="insert into tixian value(null,'{$data['openid']}',3,{$data['attach']},'{$time}',null,null)";
$tixians=mysqli_query($conn,$tixian);
}
$rechaxun="select * from tixian where openid='{$data['openid']}' and activity_id='{$data['attach']}'";
$rechaxuns=mysqli_query($conn,$rechaxun);
while($rechaxunss=mysqli_fetch_array($rechaxuns)){
$tixian_state=$rechaxunss['state'];
}
if($tixian_state==3){
//执行更新提现状态
$gengxin="update tixian set state=2 where openid='{$data['openid']}' and activity_id='{$data['attach']}'";
$gengxins=mysqli_query($conn,$gengxin);
//执行提现代码
//提现类外边,就是最下边写
$tt=new Tixian();
$tt->actionAct_tixian();
}
//=========================================================
mysqli_close($conn);
return SUCCESS;//通知微信收到数据
}
}
重写回调处理函数里边处理状态
接下来 就是配置服务器的什么回调地址 什么的 做这个就不说了 微信解释的挺清楚地 好了 今天教程将就到这里了 有问题 大家评论留言 楼主尽力解答 原创不易 受教了
标签:微信,jsapi,data,activity,mysqli,php,心得,id,conn
来源: https://www.cnblogs.com/hcfinal/p/10893962.html