小程序模板網(wǎng)

使用銀聯(lián)商務(wù)實(shí)現(xiàn)微信小程序支付

發(fā)布時(shí)間:2020-05-14 10:23 所屬欄目:小程序開發(fā)教程

最近公司的小程序需要使用到支付功能,我們使用的是銀聯(lián)商務(wù)的支付,那么如何在微信小程序中對接銀聯(lián)商務(wù)的微信小程序支付呢?這里我記錄下我在微信小程序中實(shí)現(xiàn)銀聯(lián)商務(wù)的微信小程序支付流程

一:接口部分:

這里注意銀聯(lián)商務(wù)的小程序支付目前不支持測試號(hào)支付,只有使用正式的參數(shù)實(shí)現(xiàn)小程序支付

1:銀聯(lián)商務(wù)的小程序支付接口地址:

https://qr.chinaums.com/netpay-route-server/api/

2:主要參數(shù)說明:

(1):msgSrc

消息來源:如:WWW.TEST.COM

(2):msgType

消息類型:微信小程序支付參數(shù)固定為:wx.unifiedOrder

(3):mid

商戶號(hào)

(4):tid

終端號(hào)

(5):requestTimestamp

報(bào)文請求時(shí)間,格式y(tǒng)yyy-MM-dd HH:mm:ss

(6):merOrderId

訂單號(hào),這里注意傳遞給銀聯(lián)商務(wù)的訂單號(hào)的前綴必須是來源編號(hào),例如測試號(hào)的來源編號(hào)為3194,那么這里的訂單號(hào)就必須是以3194開頭

(7):instMid

機(jī)構(gòu)商戶號(hào),這里固定為:MINIDEFAULT

(8):totalAmount

訂單金額,這里的單位為分,例如一元的話,此參數(shù)就為100

(9):tradeType

交易類型:這里固定為MINI

(10):signType

簽名算法:這里的參數(shù)有三種分別為MD5,SHA1,RSA,這里我使用的是MD5

(11):subOpenId

支付用戶openid

(12):notifyUrl

支付結(jié)果通知地址,及異步回調(diào)地址,這里注意:支付通知地址必須是偽靜態(tài)地址,例如: XXXXX/back/index,不能是XXXX/index.php?r=back/index

(13):sign

簽名,將上面的參數(shù)按照a-z的順序進(jìn)行排序,排序完成之后用&字符連接起來,連接起來之后如果存在轉(zhuǎn)義字符,那么去掉轉(zhuǎn)義字符,然后進(jìn)行md5加密獲取到簽名

接口端微信小程序下單的簡單實(shí)例如下:

$url = 'https://qr.chinaums.com/netpay-route-server/api/';  
$requestTimestamp = date('Y-m-d H:i:s',time());  
$data = [  
    'msgSrc' => 'XXX',//消息來源  
    'msgType' => 'wx.unifiedOrder',//消息類型  
    'requestTimestamp' => $requestTimestamp,  
    'mid' => 'XXX',  
    'tid' => 'XXX',  
    'merOrderId' => 'XXX',  
    'instMid' => 'MINIDEFAULT',  
    'totalAmount' => 1,  
    'tradeType' => 'MINI',  
    'signType' => 'MD5',  
    'subOpenId' => 'XXX',  
    'notifyUrl' => 'XXX',//回調(diào)地址  
];  
//獲取sign參數(shù)  
ksort($data);  
reset($data);  
$options = '';  
foreach ($data as $key => $value) {  
    $options .= $key . '=' . $value .'&';  
}  
$options = rtrim($options, '&');  
//存在轉(zhuǎn)義字符,那么去掉轉(zhuǎn)義  
if(get_magic_quotes_gpc()){  
    $options = stripslashes($options);  
}  
$sign = md5($options . $params['mdKey']);  
$data['sign'] = $sign;  
//調(diào)用銀聯(lián)商務(wù)的微信小程序下單接口  
$client = new Client();  
$response = $client->createRequest()  
    ->setMethod('POST') // 請求方式  
    ->setUrl($url)      // 請求地址  
    ->setData($data)    //數(shù)據(jù)傳數(shù)組  
    ->setHeaders(['Content-Type'=>'application/json']) //header  
    ->setFormat(Client::FORMAT_JSON) //提交的數(shù)據(jù)的格式  
    ->send();  
if (!$response->isOk) {  
    return [  
        'type' => 'error',  
        'message' => '支付調(diào)用失敗'  
    ];  
}  
if ($response->data\['errCode'] == 'SUCCESS') {  
    return [  
        'type' => 'success',  
        'message' => '支付調(diào)用成功',  
        'data' => $response->data\['miniPayRequest'\],//小程序支付用的請求報(bào)文,帶有簽名信息  
    ];  
} else {  
    return [  
        'type' => 'error',  
        'message' => '支付調(diào)用失敗' . $response->data['errMsg']  
    ];  
}

二:小程序端:

銀聯(lián)商務(wù)接口返回的miniPayRequest參數(shù)包含了微信小程序調(diào)用支付的所有參數(shù),所以我們在微信小程序端只需要見接口中的數(shù)據(jù)填充進(jìn)去就可以實(shí)現(xiàn)微信小程序支付了

//這里的payData就是接口返回的data參數(shù)  
wx.requestPayment({  
  timeStamp: payData.timeStamp,  
  nonceStr: payData.nonceStr,  
  package: payData.package,  
  signType: payData.signType,  
  paySign: payData.paySign,  
  success: (res) => {  
    //支付成功處理  
  },  
  fail: (res) => {  
    //支付失敗處理  
  }  
})

這里我們就實(shí)現(xiàn)了在微信小程序中對接銀聯(lián)商務(wù)支付了,微信小程序的支付對調(diào)是post傳值,具體信息如下:

可以根據(jù)你項(xiàng)目的具體需求進(jìn)行處理即可,這里注意在回調(diào)的結(jié)尾需要輸入SUCCESS或FAILED,不然的話可以會(huì)出現(xiàn)對此通知的現(xiàn)象


易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://www.u-renovate.com/wxmini/doc/course/25175.html 復(fù)制鏈接 如需定制請聯(lián)系易優(yōu)客服咨詢:800182392 點(diǎn)擊咨詢
QQ在線咨詢
AI智能客服 ×