微信小程序支付配置
/**
* 微信支付
* @return [type] [description]
*/
private function wxPay($ordernumber,$totalamount,$goodstitle='商品描述',$openid,$orderid)
{
Vendor('wxpay.WxPayApi');
$wxOrderData = new \WxPayUnifiedOrder();
// 自己生成的订单编号
$wxOrderData->SetOut_trade_no($ordernumber);
// 必须是JSAPI
$wxOrderData->SetTrade_type('JSAPI');
//点单价格
$totalamount = $totalamount*100;
// $totalamount = 1;
$wxOrderData->SetTotal_fee($totalamount);
//
$wxOrderData->SetBody($goodstitle);
$wxOrderData->SetOpenid($openid);
$wxOrderData->SetNotify_url("https://www.xxxxx.com/xxx/orderQuery");
return $this->getPaySignature($wxOrderData,$orderid);
}
/**
* 随机字符串
*/
private function randString()
{
$str = '0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$sing = '';
for($i=0;$i<32;$i++){
$sing.=$str[rand(0,strlen($str)-1)];
}
return $sing;
}
/**
* 生成签名
*/
private function getPaySignature($wxOrderData,$orderid)
{
Vendor('wxpay.WxPayApi');
$wxOrder = \WxPayApi::unifiedOrder($wxOrderData);
// 失败时不会返回result_code
if($wxOrder['return_code'] != 'SUCCESS' || $wxOrder['result_code'] !='SUCCESS'){
res('error','错误原因',$wxOrder);
}
$signature = $this->sign($wxOrder);
$signature['orderid']=$orderid;
return $signature;
}
/**
* 生成签名
* @param object $wxOrder 生成签名用到的数据
* @return [type] [description]
*/
private function sign($wxOrder)
{
Vendor('wxpay.WxPayApi');
$jsApiPayData = new \WxPayJsApiPay();
//传入小程序appid
$appid = appid;
$jsApiPayData->SetAppid($appid);
//按照文档,要求是字符串类型
$jsApiPayData->SetTimeStamp((string)time());
//生成随机字符串
$rand = $this->randString();
$jsApiPayData->SetNonceStr($rand);
//拼接prepay_id,要注意拼接
$jsApiPayData->SetPackage('prepay_id='.$wxOrder['prepay_id']);
//签名方式md5
$jsApiPayData->SetSignType('MD5');
//然后调用sdk自带的MakeSign方法生成签名
$sign = $jsApiPayData->MakeSign();
//然后在使用sdk自带方法获取到上面的我们赋值到成员属性生成的数组
$rawValues = $jsApiPayData->GetValues();
//然后我们在数组上加上生成的签名
$rawValues['paySign'] = $sign;
//删除appid,因为返回给客户端没有用,所以消除
unset($rawValues['appId']);
//返回
return $rawValues;
}
/**
* 支付回调接口
* 订单状态修改
* @return [type] [description]
*/
public function orderQuery()
{
$xml = $GLOBALS['HTTP_RAW_POST_DATA'];
$data = simplexml_load_string($xml,'SimpleXMLElement', LIBXML_NOCDATA);
$xmljson= json_encode($data);
$xmlarray=json_decode($xmljson,true);
// file_put_contents(__DIR__.'/log3.txt',$xmlarray,FILE_APPEND);}