微信小程序用PHP实现支付功能

在移动端开发中,微信小程序是非常重要的一部分。其中,支付功能是必不可少的一项功能。本文将介绍如何用PHP实现微信小程序的支付功能。

1、注册小程序和开通微信支付功能

在使用微信支付功能之前,我们需要在微信公众平台注册小程序,并开通微信支付功能。

1.1 注册小程序

在微信公众平台上进行注册,按照要求填写相关信息,就可以成功注册小程序。

1.2 开通微信支付功能

在小程序注册成功后,进入小程序管理后台,在“设置-开发设置-支付配置”页面中,按照要求填写相关信息,就可以开通微信支付功能。

2、PHP实现小程序支付功能

在小程序管理后台开通微信支付功能后,我们需要在小程序前端代码中调用微信支付API,并将支付所需信息传递到PHP后台进行处理。

2.1 前端代码

前端代码中需要调用微信支付API,并将支付所需信息传递到PHP后台进行处理。代码如下:

// 调用微信支付API

wx.requestPayment({

timeStamp: '', //时间戳,必填

nonceStr: '', //随机字符串,必填

package: '', //统一下单接口返回的 prepay_id 参数值,必填

signType: 'MD5', //签名算法,非必填

paySign: '', //签名,必填

success: function(res) {

// 支付成功回调函数

},

fail: function(res) {

// 支付失败回调函数

}

});

2.2 后台代码

在后台代码中,我们需要进行以下操作:

1. 获取微信支付API所需的信息;

2. 统一下单,获取 prepay_id 参数值;

3. 根据 prepay_id 参数值生成签名,返回给前端。

统一下单API地址:https://api.mch.weixin.qq.com/pay/unifiedorder

获取微信支付API所需的信息如下:

// 应用ID

$appid = '';

// 商户号

$mch_id = '';

// 随机字符串

$nonce_str = '';

// 商品描述

$body = '';

// 商户订单号

$out_trade_no = '';

// 标价金额

$total_fee = ;

// 终端IP

$spbill_create_ip = '';

// 通知地址

$notify_url = '';

// 交易类型

$trade_type = '';

统一下单代码如下:

// 生成签名

function makeSign($params, $key) {

// 将参数按照字典序排序

ksort($params);

// 拼接参数和值

$string = '';

foreach ($params as $k => $v) {

if ($v != '' && $k != 'sign') {

$string .= $k . '=' . $v . '&';

}

}

// 拼接商户 key

$string .= 'key=' . $key;

// 生成签名

$sign = strtoupper(md5($string));

return $sign;

}

// 统一下单

function unifiedOrder($appid, $mch_id, $nonce_str, $body, $out_trade_no, $total_fee, $spbill_create_ip, $notify_url, $trade_type, $key) {

// 拼接参数

$params = array(

'appid' => $appid,

'mch_id' => $mch_id,

'nonce_str' => $nonce_str,

'body' => $body,

'out_trade_no' => $out_trade_no,

'total_fee' => $total_fee,

'spbill_create_ip' => $spbill_create_ip,

'notify_url' => $notify_url,

'trade_type' => $trade_type

);

// 生成签名

$sign = makeSign($params, $key);

// 拼接 XML 请求参数

$xml = '<xml>

<appid>' . $appid . '</appid>

<mch_id>' . $mch_id . '</mch_id>

<nonce_str>' . $nonce_str . '</nonce_str>

<body><![CDATA[' . $body . ']]></body>

<out_trade_no>' . $out_trade_no . '</out_trade_no>

<total_fee>' . $total_fee . '</total_fee>

<spbill_create_ip>' . $spbill_create_ip . '</spbill_create_ip>

<notify_url>' . $notify_url . '</notify_url>

<trade_type>' . $trade_type . '</trade_type>

<sign>' . $sign . '</sign>

</xml>'>

// 发送 HTTPS POST 请求

$result = httpRequest('https://api.mch.weixin.qq.com/pay/unifiedorder', $xml);

// 解析 XML 响应参数

$xmlObj = simplexml_load_string($result, 'SimpleXMLElement', LIBXML_NOCDATA);

// 返回 prepay_id 参数值

return strval($xmlObj->prepay_id);

}

生成签名代码如下:

//生成签名

function getSign($params,$key) {

//将参数按照字典序排序

ksort($params);

//将参数拼接成字符串

$string = '';

foreach ($params as $k => $v) {

if ($v != '' && $k != 'sign') {

$string .= $k . '=' . $v . '&';

}

}

$string .= 'key=' . $key;

//MD5加密

$string = md5($string);

//将小写字母转成大写字母

$result = strtoupper($string);

return $result;

}

最后,我们将统一下单返回的 prepay_id 值,再加上商户 key、时间戳、随机字符串等参数,生成签名,并将所需信息返回给前端。代码如下:

// 支付

function payment() {

// 获取微信支付 API 所需信息

$appid = '';

$mch_id = '';

$nonce_str = '';

$body = ''; // 商品描述

$out_trade_no = ''; // 商户订单号

$total_fee = ''; // 标价金额,单位:分

$spbill_create_ip = ''; // 终端IP

$notify_url = ''; // 通知地址

$trade_type = ''; // 交易类型

// 统一下单,获取 prepay_id 参数值

$prepay_id = unifiedOrder($appid, $mch_id, $nonce_str, $body, $out_trade_no, $total_fee, $spbill_create_ip, $notify_url, $trade_type, $key);

// 生成签名

$params = array(

'appId' => $appid,

'timeStamp' => strval(time()),

'nonceStr' => $nonce_str,

'package' => 'prepay_id=' . $prepay_id,

'signType' => 'MD5'

);

$sign = getSign($params, $key);

// 将结果返回给前端

$result = array(

'timeStamp' => $params['timeStamp'],

'nonceStr' => $params['nonceStr'],

'package' => $params['package'],

'signType' => 'MD5',

'paySign' => $sign

);

return $result;

}

至此,用PHP实现微信小程序支付功能的方法就介绍完毕了。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。