下面是PHP实现微信和支付宝支付的示例代码的完整攻略。
一、微信支付
1. 获取微信支付相关信息
1.1. 微信支付功能准备
在开始使用微信支付之前,需要开通微信支付的相关功能,具体流程如下:
-
注册成为微信商户,https://pay.weixin.qq.com/index.php/core/home/login?return_url=%2Findex.php%2Fcore%2Fhome%2Findex&from=home;
-
进入微信商户平台->开发配置->支付配置,配置支付相关信息。
1.2. 获取微信支付相关信息
获取微信支付相关信息的步骤如下:
-
登录微信商户平台;
-
进入开发者中心->API安全->密钥设置,获取API秘钥等信息;
-
进入商户平台->产品中心->开发配置->支付配置页面,获取APP ID、商户号、支付秘钥等信息。
2. 发起微信支付请求
2.1. 生成微信支付请求参数
生成微信支付请求参数的步骤如下:
-
根据微信支付API文档,构造预支付订单信息;
-
将预支付订单信息生成签名;
-
对所有签名参数进行字典序排序并拼接成字符串;
-
对拼接后的字符串进行MD5加密,得到签名;
-
将签名加入预支付订单信息中。
2.2. 发起微信支付请求
发起微信支付请求的步骤如下:
-
将微信支付参数和各种身份信息等发送给微信支付接口;
-
微信支付接口返回支付二维码,将二维码展示给用户;
-
用户使用微信客户端扫码支付完成付款。
3. 微信支付回调处理
3.1. 配置微信支付回调地址
在微信商户平台配置微信支付回调地址,方便微信支付接口将支付成功的信息发送到指定地址。
3.2. 处理微信支付回调信息
微信支付回调信息处理流程如下:
-
根据微信支付API文档,验证回调信息的签名;
-
验证通过后获取回调内容;
-
根据回调内容的状态,更新订单状态。
二、支付宝支付
1. 获取支付宝支付相关信息
1.1. 支付宝支付功能准备
在开始使用支付宝支付之前,需要开通支付宝支付的相关功能,具体流程如下:
-
注册成为支付宝商户,https://open.alipay.com/;
-
进入开放平台->开发者中心->应用管理,创建应用并配置支付宝支付功能。
1.2. 获取支付宝支付相关信息
获取支付宝支付相关信息的步骤如下:
-
登录支付宝开放平台;
-
进入开发者中心->应用管理->查询应用的APPID、PID、密钥等信息。
2. 发起支付宝支付请求
2.1. 生成支付宝支付请求参数
生成支付宝支付请求参数的步骤如下:
-
根据支付宝支付API文档,构造预支付订单信息;
-
将预支付订单信息生成签名;
-
将参数和签名拼接成字符串。
2.2. 发起支付宝支付请求
发起支付宝支付请求的步骤如下:
-
把请求参数中的参数和签名组成HTML表单,提交给支付宝支付接口;
-
支付宝支付接口返回支付二维码,将二维码展示给用户;
-
用户使用支付宝客户端扫码支付完成付款。
3. 支付宝支付回调处理
3.1. 配置支付宝支付回调地址
在支付宝开放平台配置支付宝支付回调地址,方便支付宝支付接口将支付成功的信息发送到指定地址。
3.2. 处理支付宝支付回调信息
支付宝支付回调信息处理流程如下:
-
根据支付宝支付API文档,验证回调信息的签名;
-
验证通过后获取回调内容;
-
根据回调内容的状态,更新订单状态。
三、示例说明
下面使用PHP编写一个简单的示例,实现微信支付和支付宝支付的功能。以微信为例,接下来将演示如何编写微信支付接口以及支付回调处理接口代码。
微信支付示例代码:
<?php
// 微信支付接口
$wxPay = function () {
// 根据微信支付API文档,构造预支付订单信息
$params = array(
"appid" => $appId,
"mch_id" => $merchantId,
"nonce_str" => $nonceStr,
"body" => $body,
"out_trade_no" => $orderNum,
"total_fee" => $totalFee,
"spbill_create_ip" => $clientIp,
"notify_url" => $notifyUrl,
"trade_type" => "NATIVE"
);
// 将预支付订单信息生成签名
$sign = createSign($params);
// 对所有签名参数进行字典序排序并拼接成字符串
$signParams = sortParams($params);
// 对拼接后的字符串进行MD5加密,得到签名
$sign = getSign($signParams, $signKey);
// 将签名加入预支付订单信息中
$params["sign"] = $sign;
// 将微信支付参数和各种身份信息等发送给微信支付接口
$result = curlPost($wxpayUrl, arrayToXml($params));
// 微信支付接口返回支付二维码
$result = json_decode(json_encode(simplexml_load_string($result, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
$payQrCodeUrl = $result["code_url"];
};
// 微信支付回调处理接口
$wxPayCallback = function () {
// 根据微信支付API文档,验证回调信息的签名
$sign = $_GET["sign"];
// 验证通过后获取回调内容
$xml = file_get_contents("php://input");
$params = xmlToArray($xml);
// 根据回调内容的状态,更新订单状态
};
?>
在代码的示例中,包含了微信支付接口和微信支付回调处理接口。其中,$wxPay
变量代表支付接口,$wxPayCallback
变量代表支付回调处理接口。接下来可以根据相应的文档说明,编写支付宝支付示例代码。