//引用官方SDK,放置位置详见下面地址
require_once '../extend/wxpay/lib/WxPay.Api.php';
require_once '../extend/wxpay/example/WxPay.Config.php';//在里面配置好参数!!!
$openId = db('users')->where('id', $userid)->value('openid');
$order = $goods['order_number'];//这里我写的是订单号
$money = $goods['total'] * 100;
$config = new \WxPayConfig();
//初始化值对象
$input = new \WxPayUnifiedOrder();
//文档提及的参数规范:商家名称-销售商品类目
$input->SetBody("商家名称");
//订单号应该是由小程序端传给服务端的,在用户下单时即生成,demo中取值是一个生成的时间戳
$input->SetOut_trade_no("$order");
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
//费用应该是由小程序端传给服务端的,在用户下单时告知服务端应付金额,
$input->SetTotal_fee("$money");
$input->SetNotify_url("回调地址自己写!!!");
$input->SetTrade_type("JSAPI");
//由小程序端传给服务端
$input->SetOpenid($openId);//APPID小程序传过来 或者数据库读取。
//向微信统一下单,并返回order,它是一个array数组
$order = \WxPayApi::unifiedOrder($config, $input);
if ($order['return_code'] == 'SUCCESS') {
$info = array(
'appId' => $order['appid'],
'timeStamp' => "" . time() . "",
'nonceStr' => $order['nonce_str'],
'package' => 'prepay_id=' . $order['prepay_id'],
'signType' => 'MD5',
);
$info['paySign'] = $this->sign($info);//验签!!关键!!!!!!
// json化返回给小程序端
// header("Content-Type: application/json");
return json($info);
} else {
return json(['msg' => 'fail']);
}
关键!!!验签方法!!
public function sign($data, $key = '这里是支付APIKEY,必填!!!')
{
ksort($data);
$buff = '';
foreach ($data as $k => $v) {
if ($k != "sign" && $v != "" && !is_array($v)) {
$buff .= $k . "=" . $v . "&";
}
}
$buff = trim($buff, "&");
$string = $buff . "&key=" . $key;
$string = md5($string);
$sign = strtoupper($string);
return $sign;
}
以上。