首先说下参数说明,以免有的童鞋看不懂:
开始正文,PC端支付:
/**
* pc端扫码支付
* @param array $pargem 请求参数
* @return array 返回信息
*/
protected function NativePay($pargem = array()){
//引入api
require_once ROOT_PATH.'vendor/wechat/lib/WxPay.Api.php';
require_once ROOT_PATH.'vendor/wechat/example/WxPay.NativePay.php';
//定义参数
$result = array();
//实例化
$notify = new \NativePay();
$input = new \WxPayUnifiedOrder();
//拼接参数
$input->SetBody($pargem['goods_name']);
$input->SetAttach($pargem['content']);
$input->SetOut_trade_no($pargem['order_sn']);
$input->SetTotal_fee($pargem['order_amount']*100);
$input->SetTime_start($pargem['add_time']);
$input->SetTime_expire(date("YmdHis", $pargem['add_time'] + 86400));
$input->SetGoods_tag($pargem['goods_name']);
$input->SetNotify_url("http://".$_SERVER['HTTP_HOST']."/communal/Weixinpay/notify.html");
$input->SetTrade_type("NATIVE");
$input->SetProduct_id($pargem['order_sn']);
//支付参数
$res = $notify->GetPayUrl($input);
//拼接返回
if(!empty($res)){
$result['code'] = 0;
$result['data'] = $res['code_url'];
}else{
$result['code'] = 1;
$result['data'] = '';
}
//返回值
return $result;
}
其次,移动H5支付:
protected function WeChatPayment($pargem = array()){
//定义参数
$result = array();
//引入api
require_once ROOT_PATH.'vendor/wechat/lib/WxPay.Api.php';
require_once ROOT_PATH.'vendor/wechat/example/WxPay.JsApiPay.php';
//实例化
$config = new \WxPayConfig();
$wxpay = new \WxPayApi();
$input = new \WxPayUnifiedOrder();
//统一下单
$input->SetBody($pargem['goods_name']);
$input->SetAttach($pargem['goods_name']); //商户支付日志
$input->SetOut_trade_no($pargem['order_sn']); //商户订单号
$input->SetTotal_fee($pargem['order_amount']*100); //总金额
$input->SetTime_start($pargem['add_time']);
$input->SetTime_expire(date("YmdHis", $pargem['add_time'] + 86400));
$input->SetSpbill_create_ip($this->get_real_ip());
$input->SetNotify_url("http://medical.tongrentangsxls.com/"); //通知地址
$input->SetTrade_type("MWEB"); //交易类型
$input->SetProduct_id($pargem['order_sn']);
$input->SetOpenid($pargem['openId']);
$res = $wxpay->unifiedOrder($config,$input);
//拼接返回参数
if($res['result_code']=='SUCCESS' && $res['return_code']=='SUCCESS'){
$result['code'] = 0;
$result['data'] = $res['mweb_url'];
}else{
$result['code'] = 1;
$result['data'] = '微信支付失败';
}
//返回值
return $result;
}
最后,jsapi支付:
protected function WeChatPay($pargem = array()){
//定义参数
$result = array();
//引入api
require_once ROOT_PATH.'vendor/wechat/lib/WxPay.Api.php';
require_once ROOT_PATH.'vendor/wechat/example/WxPay.JsApiPay.php';
//实例化
$config = new \WxPayConfig();
$tools = new \JsApiPay();
$wxpay = new \WxPayApi();
$input = new \WxPayUnifiedOrder();
//拼接参数
$input->SetBody($pargem['goods_name']); //商品名称
$input->SetAttach($pargem['content']); //附加参数,可填可不填,填写的话,里边字符串不能出现空格
$input->SetOut_trade_no($pargem['order_sn']); //订单号
$input->SetTotal_fee($pargem['order_amount']*100); //支付金额,单位:分
$input->SetTime_start($pargem['add_time']); //支付发起时间
$input->SetTime_expire(date("YmdHis", $pargem['add_time'] + 86400));//支付超时
$input->SetGoods_tag($pargem['goods_name']);
$input->SetNotify_url("http://medical.tongrentangsxls.com/");
$input->SetTrade_type("JSAPI"); //支付类型
$input->SetOpenid($pargem['openId']); //用户openID
//统一下单
$order = $wxpay->unifiedOrder($config,$input);
//拼接参数
$res = $tools->GetJsApiParameters($order);
//拼接返回
if(!empty($res)){
$result['code'] = 0;
$result['data'] = $res;
}else{
$result['code'] = 1;
$result['data'] = '支付失败';
}
//返回值
return $result;
}
差点忘了,查询订单:
public function wechat_order_query($pargem = array()){
//引入api
require_once ROOT_PATH.'vendor/wechat/lib/WxPay.Api.php';
require_once ROOT_PATH.'vendor/wechat/example/WxPay.Config.php';
//定义参数
$result = array();
//判断参数
if(!empty($pargem)){
//实例化
$input = new \WxPayOrderQuery();
$config = new \WxPayConfig();
//拼接参数
$input->SetOut_trade_no($pargem['order_sn']);
//查询订单
$res = \WxPayApi::orderQuery($config, $input);
//拼接参数
if(!empty($res)){
if($res['result_code']=='SUCCESS' && $res['return_code']=='SUCCESS'){
$result['code'] = 0;
$result['data'] = '支付成功';
}else{
$result['code'] = 1;
$result['data'] = $res['err_code_des'];
}
}else{
$result['code'] = 1;
$result['data'] = '查询失败';
}
}else{
$result['code'] = 1;
$result['data'] = '关键参数为空';
}
//返回值
return $result;
}
鹅厂支付最关键的就是要配置好支付地址,如果你的支付地址不对就会报错,很麻烦。而且微信支付获取的是request header里的referer地址。PC端支付返回的是二维码的地址,需要看官调用phpcode生产二维码就好。
总结:鹅厂支付是我接过最难的支付接口,官方各种接口文档描述笼统,根本看不懂。而且还有个问题就是生产环境不能直接测试,一定要上线测试。
各位看官,看在小弟直接上代码的份上点个赞再走呗!