微信扫码支付

今天和大家分享一下关于微信扫码支付的主要流程。

1、从官网下载下来sdk后,按照说明进行商户信息的配置。

2、官网demo中,打开example文件夹中的native.php,可以看到一下两行。我们需要把这两行传入的数据记录到自己的数据表中。

$input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));//设置订单号

$input->SetProduct_id("123456789"); //这里是存于我们数据库的唯一订单标识,建议传订单号或者订单id

3、用户使用微信支付成功后,微信会回调数据给我们。回调数据中,有几个重要返回参数

"cash_fee":"1",

"is_subscribe":"Y", //是否支付

"out_trade_no":"139762060220161101101840", //订单号:使用这个返回值与之前我们记录到数据库中的值进行比对

"result_code":"SUCCESS",

"return_code":"SUCCESS",

"total_fee":"1",//支付总金额

"trade_state":"SUCCESS",

4、判断返回的数据是否支付成功,进而变更我们的订单的支付状态

实例:

1、请求微信获取支付码并输出

//请求微信获取支付码并输出

$.post('/zhifu/weixin/example/native.php',{'order_id':order_id},function(data2){

if(data2.return_code=='SUCCESS'){

$('#wx_pay_img').attr({'src':data2.zhifu_url});

$('#wx_pay_img').show();

}else{

alert("失败:"+data2.return_msg);

}

},'json')

2、在请求微信支付时,写一些业务逻辑

ini_set('date.timezone','Asia/Shanghai');

//error_reporting(E_ERROR);

require_once "../lib/WxPay.Api.php";

require_once "WxPay.NativePay.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('vip_house0769', $link)) {

echo 'Could not select database';

exit;

}

$order_id = $_REQUEST['order_id'];

$sql = "SELECT * FROM v9_chongzhi_order where id={$order_id} ";//echo $sql;

$result = mysql_query($sql, $link);

$order_info = mysql_fetch_assoc($result);

$notify = new NativePay();

$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/notify.php");//支付成功后的回调地址

$input->SetTrade_type("NATIVE");

$input->SetProduct_id($order_info['id']);

$result = $notify->GetPayUrl($input);

if($result['return_code']=='SUCCESS'){

$url2 = $result["code_url"];

$result['zhifu_url'] = "http://www.域名.com/zhifu/weixin/example/qrcode.php?data=".urlencode($url2);

}

echo json_encode($result);

?>

3、支付成功后,回调文件中,写业务逻辑

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('vip_house0769', $link)) {

echo 'Could not select database';

exit;

}

$order_sn = $result['out_trade_no'];

$update_order_sql = "update v9_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 v9_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 v9_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);

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180405G18E3Y00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券