今天小编给大家分享一下php微信支付流程是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
微信支付基本流程
微信支付的基本流程可以分为用户在商家APP或H5页面下单、商家调用微信支付API进行支付、微信返回交易结果、商家接收支付通知四个步骤。
具体来说,当用户在商家APP或H5页面下单时,商家需要把订单信息传递到微信支付平台,经过微信支付平台的支付处理后,返回支付结果。当支付结果返回后,商家根据交易结果进行相应的业务处理,并向用户展示交易结果。
用户选择商品并提交订单;
商户系统接收到用户订单请求,调用微信支付API提交交易请求;
微信支付平台接收到商户请求后,验证用户身份和支付金额,向用户发起订单支付请求。
用户确认支付,输入支付密码
微信支付平台将支付结果返回商户系统,并通知用户支付成功。
微信支付技术原理
微信支付技术原理主要由微信支付API、微信支付平台、商户系统三部分组成,下面我们先来看一下微信支付的API。
微信支付API
当商户系统通过微信支付发起支付请求时,需要通过微信支付API向微信支付平台发送支付请求。微信支付API是一组RESTful接口,具有高度的可读性和易使用性,主要包括统一下单、查询订单、关闭订单、申请退款、查询退款等接口。下面我们主要介绍一下统一下单接口的使用。
统一下单接口的使用步骤
获取预支付订单号
在商户系统中,开发人员通过调用微信支付API的统一下单接口,向微信支付平台提交支付请求。微信支付平台收到请求后,对商户提交的订单信息进行校验,然后返回一个预支付订单号,用于唯一标识该笔订单。开发人员需要保存该预支付订单号,并作为后续支付流程的重要参数使用。
统一下单接口调用示例:
<?php require_once "WxPay.Api.php"; $input = new WxPayUnifiedOrder(); $input->SetBody("test"); $input->SetOut_trade_no(WxPayConfig::MCHID . date("YmdHis")); $input->SetTotal_fee("1"); $input->SetTime_start(date("YmdHis")); $input->SetTime_expire(date("YmdHis", time() + 600)); $input->SetNotify_url("http://www.example.com/wxpay/notify.php"); $input->SetTrade_type("APP"); $order = WxPayApi::unifiedOrder($input); print_r($order); ?>
获取支付参数
在接收到微信支付平台返回的预支付订单号后,商户系统需要再次调用微信支付API的统一下单接口,获取支付参数。支付参数包括APPID、时间戳、随机字符串、签名方式、支付签名等。支付签名是商户系统或第三方支付代理商对支付参数进行加密后的结果,唯一标识该笔交易。商户系统需要保存这些支付参数,并将其返回给移动端,由移动端唤起微信SDK完成支付流程。
统一下单接口调用示例:
$parameters = [ 'appid' => $app_id, 'partnerid' => $mch_id, 'prepayid' => $prepay_id, 'package' => 'Sign=WXPay', 'noncestr' => $nonce_str, 'timestamp' => $timestamp, ]; ksort($parameters); $string = ''; foreach ($parameters as $key => $value) { $string .= $key . '=' . $value . '&'; } $string .= 'key=' . $key; $parameters['sign'] = strtoupper(md5($string));
微信支付平台
微信支付平台是微信的一个支付服务平台,主要由支付、结算、清算等模块构成。支付模块负责接收商户下发的支付请求并进行处理,接收并处理支付结果通知;结算模块负责商户的结算,包括商户的结算查询、结算策略配置、生成结算清单等;清算模块负责定期清算,管理微信支付平台各功能模块的财务事务。
商户系统
商户系统是微信支付的用户端,负责接收、处理微信支付平台发起的各种支付请求,并进行相应的支付操作。文中所提到的商户系统主要是指PHP商户系统,通过调用微信支付API传输订单信息、获取预支付订单号、获取支付参数等基本支付操作。