微信小プログラムのwx.requestPaymentが微信決済を開始
59950 ワード
wx.requestPaymentが微信決済を開始
timeStampタイムスタンプ
noncesStrランダム文字列
Package統合単一インタフェースから返されるprepay_idパラメータ値
SignType署名アルゴリズム
paySign支払署名
successインタフェースのコールバックに成功
failインタフェース失敗コールバック
completeインタフェースはコールバックを完了します(成功、失敗はすべて実行します)
1.バックグラウンドインタフェースを先に呼び出し、基本データを生産する
timeStampタイムスタンプ
noncesStrランダム文字列
Package統合単一インタフェースから返されるprepay_idパラメータ値
SignType署名アルゴリズム
paySign支払署名
successインタフェースのコールバックに成功
failインタフェース失敗コールバック
completeインタフェースはコールバックを完了します(成功、失敗はすべて実行します)
1.バックグラウンドインタフェースを先に呼び出し、基本データを生産する
-
//
-
Api.BalancePay({
-
openid: openid,
-
amount: amount,
-
bid: bid,
-
}).then(res => {
-
if (res.errno) {
-
wx.showToast({ title: res.errdesc });
-
return;
-
}
-
var
data = res.
data;
-
...
-
})
?
。
id 。
。
。
。
-
public
function unifiedorder($openid,$order_num,$total_fee,$products_name){
-
$trade_no = $order_num;
-
$url =
'https://api.mch.weixin.qq.com/pay/unifiedorder';
-
$data = [
-
'appid' => C(
'APPID'),
-
'mch_id' => C(
'MCHID'),
-
'nonce_str' =>
$this->createNonceStr(),
-
'sign_type' =>
'MD5',
-
'body' => $products_name,
//
-
'attach' => C(
'PAY_ATTACH_NAME'),
-
'out_trade_no' => $trade_no,
//
-
'fee_type' =>
'CNY',
-
'total_fee' => $total_fee,
-
'spbill_create_ip' => $_SERVER[
'REMOTE_ADDR'],
-
'goods_tag' => C(
'PAY_ATTACH_NAME'),
-
'notify_url' =>
'https://a.squmo.com/'.C(
'PAY_URL_NAME').
'/Recharge/order_notice',
-
'trade_type' =>
'JSAPI',
-
'openid' => $openid
-
];
-
-
//
-
$sign =
$this->MakeSign($data);
-
$data[
'sign'] = $sign;
-
$xml =
$this->ToXml($data);
-
vendor(
'Func.Http');
-
//
-
$result =
$this->FromXml(Http::postXmlCurl($url,$xml));
-
return $result;
-
}
, 。
-
$unifiedorder =
$this->unifiedorder($openid,$order_num,$total_price,$products_name);
-
$data = [
-
'appId' => C(
'APPID'),
-
'timeStamp' => time(),
-
'nonceStr' =>
$this->createNonceStr(),
-
'package' =>
'prepay_id='.$unifiedorder[
'prepay_id'],
-
'signType' =>
'MD5'
-
];
-
//
-
$sign =
$this->MakeSign($data);
-
$data[
'sign'] = $sign;
-
$this->json->setAttr(
'data',$data);
-
$this->json->Send();
2.
-
wx.requestPayment({
-
'timeStamp': data.timeStamp.toString(),
-
'nonceStr': data.nonceStr,
-
'package': data.package,
-
'signType':
'MD5',
-
'paySign': data.sign,
-
'success':
function (res) {
-
console.log(
' ');
-
},
-
'fail':
function (res) {
-
console.log(
' ');
-
return;
-
},
-
'complete':
function (res) {
-
console.log(
' ');
-
var url = that.data.url;
-
console.log(
'get url', url)
-
if (res.errMsg ==
'requestPayment:ok') {
-
wx.showModal({
-
title:
' ',
-
content:
' '
-
});
-
if (url) {
-
setTimeout(
function () {
-
wx.redirectTo({
-
url:
'/pages' + url
-
});
-
},
2000)
-
}
else {
-
setTimeout(
() => {
-
wx.navigateBack()
-
},
2000)
-
}
-
}
-
return;
-
}
-
});
3. ( )
-
//
-
public
function order_notice(){
-
// post
-
$xml = $GLOBALS[
'HTTP_RAW_POST_DATA'];
-
//
-
$data =
$this->FromXml($xml);
-
// sign
-
$data_sign = $data[
'sign'];
-
// sign
-
unset($data[
'sign']);
-
-
$sign =
$this->makeSign($data);
-
//
-
if ( ($sign===$data_sign) && ($data[
'return_code']==
'SUCCESS') && ($data[
'result_code']==
'SUCCESS') ) {
-
$result = $data;
-
//
-
$order_num = $data[
'out_trade_no'];
//
-
$openid = $data[
'openid'];
// openID
-
$total_fee = $data[
'total_fee'];
//
-
$transaction_id = $data[
'transaction_id'];
//
-
$user = M(
'user');
-
$user_flag = $user->where(
array(
'openid'=>$openid))->find();
-
$save_data =
array(
-
'total_payed_price' => $total_fee,
//
-
'transaction_id' => $transaction_id,
-
'paytime' => time(),
-
'status' =>
2
//1 ;2 ;3 ;4 ;5
-
);
-
$recharge = M(
'recharge');
-
$recharge_flag=$recharge->where(
array(
'recoder'=>$order_num,
'uid'=>$user_flag[
'id']))->find();
-
$recharge_amount=$recharge_flag[
'amount'];
-
$recharge_save_flag =$recharge->where(
array(
'recoder'=>$order_num,
'uid'=>$user_flag[
'id']))->save($save_data);
-
if($recharge_save_flag){
-
$save_balance[
'balance']= $user_flag[
'balance']+$recharge_amount;
-
$result_balance =$user->where(
array(
'openid'=>$openid))->save($save_balance);
-
}
-
}
else{
-
$result =
false;
-
}
-
//
-
if ($result) {
-
$str=
'
';
-
}
else{
-
$str=
'
';
-
}
-
echo $str;
-
return $result;
-
}
-
public
function FromXml($xml)
-
{
-
if(!$xml){
-
throw
new WxPayException(
"xml !");
-
}
-
// XML array
-
// xml
-
libxml_disable_entity_loader(
true);
-
$this->values = json_decode(json_encode(simplexml_load_string($xml,
'SimpleXMLElement', LIBXML_NOCDATA)),
true);
-
return
$this->values;
-
}
-
-
public
function ToXml($array){
-
if(!is_array($array)|| count($array) <=
0){
-
return ;
-
}
-
$xml =
'
' ;
-
foreach ($array
as $key=>$val){
-
if (is_numeric($val)){
-
$xml.=
".$key.
">".$val.
"".$key.
">";
-
}
else{
-
$xml.=
".$key.
">.$val.
"]]>".$key.
">";
-
}
-
}
-
$xml.=
"";
-
return $xml;
-
}
-
-
private
function MakeSign($data)
-
{
-
// :
-
ksort($data);
-
$string =
$this->ToUrlParams($data);
-
// : string KEY
-
$string = $string .
"&key=".C(
'WEIXIN_PAY_KEY');
-
// :MD5
-
$string = md5($string);
-
// :
-
$result = strtoupper($string);
-
return $result;
-
}
-
-
private
function ToUrlParams($array)
-
{
-
$buff =
"";
-
foreach ($array
as $k => $v)
-
{
-
if($k !=
"sign" && $v !=
"" && !is_array($v)){
-
$buff .= $k .
"=" . $v .
"&";
-
}
-
}
-
$buff = trim($buff,
"&");
-
return $buff;
-
}