微信小程序支付、充值(后台用thinkphp)
微信小程序支付、充值系统开发
准备工作
1.申请小程序AppID和APPSECRET2. 获取MCHID(商户ID)和KEY(商户密钥)
制作签名
签名需要五个参数分别是:
* appId(小程序AppID)
* timeStamp(当前时间戳)
* nonceStr(随机字符串)
* package(统一下单返回的值)
* signType(固定值:微信支付)
```phpfunction makeSign($params) {
$sign = "";
ksort($params);
foreach ($params as $key => $value) {
$sign .= $key . "=" . $value . "&";
}
$sign = rtrim($sign, "&");
$sign = hash("sha256", $sign . "&key=" . config('pay.key'));
return $sign;
}
```
微信支付接口
1. 统一下单接口
* 请求方式:POST * 请求地址: * 请求参数:
* `appid`:小程序AppID * `mch_id`:商户ID * `nonce_str`:随机字符串 * `body`:支付描述 * `out_trade_no`:订单号 * `total_fee`:金额(分)
* `spbill_create_ip`:IP地址 * 请求示例:
```phpfunction unifiedOrder($params) {
$url = " $data = array(
'appid' => config('pay.appid'),
'mch_id' => config('pay.mchid'),
'nonce_str' => getNonceStr(),
'body' => $params['body'],
'out_trade_no' => $params['out_trade_no'],
'total_fee' => $params['total_fee'] *100,
'spbill_create_ip' => $_SERVER['REMOTE_ADDR']
);
$data = array_merge($data, array('sign' => makeSign($data)));
return curlPost($url, $data);
}
```
2. 查询订单接口
* 请求方式:GET * 请求地址: * 请求参数:
* `appid`:小程序AppID * `mch_id`:商户ID * `transaction_id`:订单号 * 请求示例:
```phpfunction orderQuery($params) {
$url = " $data = array(
'appid' => config('pay.appid'),
'mch_id' => config('pay.mchid'),
'transaction_id' => $params['transaction_id']
);
return curlGet($url, $data);
}
```
3. 关闭订单接口
* 请求方式:POST * 请求地址: * 请求参数:
* `appid`:小程序AppID * `mch_id`:商户ID * `out_trade_no`:订单号 * 请求示例:
```phpfunction closeOrder($params) {
$url = " $data = array(
'appid' => config('pay.appid'),
'mch_id' => config('pay.mchid'),
'out_trade_no' => $params['out_trade_no']
);
return curlPost($url, $data);
}
```
4. 反馈接口
* 请求方式:POST * 请求地址: * 请求参数:
* `appid`:小程序AppID * `mch_id`:商户ID * `transaction_id`:订单号 * `out_trade_no`:订单号 * `openid`:用户OpenID * 请求示例:
```phpfunction feedback($params) {
$url = " $data = array(
'appid' => config('pay.appid'),
'mch_id' => config('pay.mchid'),
'transaction_id' => $params['transaction_id'],
'out_trade_no' => $params['out_trade_no'],
'openid' => $params['openid']
);
return curlPost($url, $data);
}
```
充值接口
1. 统一下单接口
* 请求方式:POST * 请求地址: * 请求参数:
* `appid`:小程序AppID * `mch_id`:商户ID * `nonce_str`:随机字符串 * `body`:充值描述 * `out_trade_no`:订单号 * `total_fee`:金额(分)
* `spbill_create_ip`:IP地址 * 请求示例:
```phpfunction unifiedOrder($params) {
$url = " $data = array(
'appid' => config('pay.appid'),
'mch_id' => config('pay.mchid'),
'nonce_str' => getNonceStr(),
'body' => $params['body'],
'out_trade_no' => $params['out_trade_no'],
'total_fee' => $params['total_fee'] *100,
'spbill_create_ip' => $_SERVER['REMOTE_ADDR']
);
$data = array_merge($data, array('sign' => makeSign($data)));
return curlPost($url, $data);
}
```
2. 查询订单接口
* 请求方式:GET * 请求地址: * 请求参数:
* `appid`:小程序AppID * `mch_id`:商户ID * `transaction_id`:订单号 * 请求示例:
```phpfunction orderQuery($params) {
$url = " $data = array(
'appid' => config('pay.appid'),
'mch_id' => config('pay.mchid'),
'transaction_id' => $params['transaction_id']
);
return curlGet($url, $data);
}
```
3. 关闭订单接口
* 请求方式:POST * 请求地址: * 请求参数:
* `appid`:小程序AppID * `mch_id`:商户ID * `out_trade_no`:订单号 * 请求示例:
```phpfunction closeOrder($params) {
$url = " $data = array(
'appid' => config('pay.appid'),
'mch_id' => config('pay.mchid'),
'out_trade_no' => $params['out_trade_no']
);
return curlPost($url, $data);
}
```
4. 反馈接口
* 请求方式:POST * 请求地址: * 请求参数:
* `appid`:小程序AppID * `mch_id`:商户ID * `transaction_id`:订单号 * `out_trade_no`:订单号 * `openid`:用户OpenID * 请求示例:
```phpfunction feedback($params) {
$url = " $data = array(
'appid' => config('pay.appid'),
'mch_id' => config('pay.mchid'),
'transaction_id' => $params['transaction_id'],
'out_trade_no' => $params['out_trade_no'],
'openid' => $params['openid']
);
return curlPost($url, $data);
}
```
注意事项
1. 统一下单接口
* 请求方式:POST * 请求地址: * 请求参数:
+ `appid`:小程序AppID + `mch_id`:商户ID + `nonce_str`:随