php的功能是很强大的,本文我们主要和大家分享php后端实现微信小程序支付代码,前端:比较简单,在对应的支付事件上进行网络请求就好:
微信小程序支付 后端php(二)
view_moneysure:function(){
var code = this.data.code;
console.log('code是' +code)
wx.request({
url: 'https://...com/pay.php',//这个链接是后端写的
header: {
'content-type': 'application/x-www-form-urlencoded'
},
data: {
code: code,
},
method: 'post',
success: function (response) {
console.log( response.data);
// 发起支付
wx.requestpayment({
'appid': response.data.appid,
'timestamp': response.data.timestamp,
'noncestr': response.data.noncestr,
'package': response.data.package,
'signtype': 'md5',
'paysign': response.data.paysign,
'success': function (res) {
wx.showtoast({
title: '支付成功'
});
console.log(res);
},
'fail': function (res) {
console.log(res)
}
});
},
fail: function (res) {
console.log(res)
}
})
},
后端代码:
1. pay.php //小程序请求的后端地址
e16c3c8897157dbebcecebd11889006esetbody(testceshi);
// 订单号应该是由小程序端传给服务端的,在用户下单时即生成,demo中取值是一个生成的时间戳
$input->setout_trade_no(time().'');
// 费用应该是由小程序端传给服务端的,在用户下单时告知服务端应付金额,demo中取值是1,即1分钱
$input->settotal_fee(1);
$input->setnotify_url(https://...com/notify.php);//需要自己写的notify.php
$input->settrade_type(jsapi);
// 由小程序端传给后端或者后端自己获取,写自己获取到的,
$input->setopenid('udhncondjcnkjnjknkcssdcabckn');
//$input->setopenid($this->getsession()->openid);
// 向微信统一下单,并返回order,它是一个array数组
$order = wxpayapi::unifiedorder($input);
// json化返回给小程序端
header(content-type: application/json);
echo $this->getjsapiparameters($order);
}
private function getjsapiparameters($unifiedorderresult)
{ //判断是否统一下单返回了prepay_id
if(!array_key_exists(appid, $unifiedorderresult)
|| !array_key_exists(prepay_id, $unifiedorderresult)
|| $unifiedorderresult['prepay_id'] == )
{
throw new wxpayexception(参数错误);
}
$jsapi = new wxpayjsapipay();
$jsapi->setappid($unifiedorderresult[appid]);
$timestamp = time();
$jsapi->settimestamp($timestamp);
$jsapi->setnoncestr(wxpayapi::getnoncestr());
$jsapi->setpackage(prepay_id= . $unifiedorderresult['prepay_id']);
$jsapi->setsigntype(md5);
$jsapi->setpaysign($jsapi->makesign());
$parameters = json_encode($jsapi->getvalues());
return $parameters;
}
//这里是服务器端获取openid的函数
// private function getsession() {
// $code = $this->input->post('code');
// $url = 'https://api.weixin.qq.com/sns/jscode2session?appid='.wxpayconfig::appid.'&secret='.wxpayconfig::appsecret.'&js_code='.$code.'&grant_type=authorization_code';
// $response = json_decode(file_get_contents($url));
// return $response;
// }
}
$wxpay = new wxpay();
$wxpay->index();
2. 微信sdk 下载链接:https://pay.weixin.qq.com/wiki/doc/api/download/wxpayapi_php_v3.zip
解压在lib文件夹下可以看到:
放到服务端可访问的目录下。
在wxpayconfig.php里面配置账号信息:
class wxpayconfig
{
//=======【基本信息设置】=====================================
//
/**
* todo: 修改这里配置为您自己申请的商户信息
* 微信公众号信息配置
*
* appid:绑定支付的appid(必须配置,开户邮件中可查看)
*
* mchid:商户号(必须配置,开户邮件中可查看)
*
* key:商户支付密钥,参考开户邮件设置(必须配置,登录商户平台自行设置)
* 设置地址:https://pay.weixin.qq.com/index.php/account/api_cert
*
* appsecret:公众帐号secert(仅jsapi支付的时候需要配置, 登录公众平台,进入开发者中心可设置),
* 获取地址:https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=2005451881&lang=zh_cn
* @var string
*/
const appid = 'wx123456789...';//这里填上自己的对应信息
const mchid = '14151666888';
const key = '11223344556677889900';
const appsecret = '828bfsdibfsiubfikdbfik';
const notify_url='https://...com/notify.php';
注:
期间遇到一个签名错误,一直不好,使用微信支付接口签名校验工具校验也没有错,像网上说的漏写错写参数都查了,就是一直返回
<return_code><![cdata[fail]]></return_code>
<return_msg><![cdata[签名错误]]></return_msg>
这样的信息,最后解决办法是:重置了key (商户支付密钥),重置的和之前的一模一样,但竟然就可以了...
问题主要都是报签名错误,仔细检查就好,比如xml格式不对,md5加密后的位数,字典排序没排好,缺少参数等...
https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1&index=1
3.最后附上notify.php
<?php
/**
* created by phpstorm.
* user: ufo
* date: 17/7/13
* time: 下午6:42
*/
require_once ('wxpay.api.php');
require_once ('wxpay.notify.php');
class paynotifycallback extends wxpaynotify
{
//查询订单
public function queryorder($transaction_id)
{
$input = new wxpayorderquery();
$input->settransaction_id($transaction_id);
$result = wxpayapi::orderquery($input);
if(array_key_exists("return_code", $result)
&& array_key_exists("result_code", $result)
&& $result["return_code"] == "success"
&& $result["result_code"] == "success")
{
return true;
}
return false;
}
//重写回调处理函数
public function notifyprocess($data, &$msg)
{
$notfiyoutput = array();
if(!array_key_exists("transaction_id", $data)){
$msg = "输入参数不正确";
return false;
}
//查询订单,判断订单真实性
if(!$this->queryorder($data["transaction_id"])){
$msg = "订单查询失败";
return false;
}
return true;
}
}
$notify = new paynotifycallback();
$notify->handle(false);
欢迎留言交流指正!
相关推荐:
php实现app唤起支付宝支付代码
php银联在线支付接口的开发实例
实现微信扫码支付php代码分享
以上就是php实现微信小程序支付代码分享的详细内容。