引言:最近在開發支付寶小程序生成二維碼的時候碰到了一點問題,記錄一下
1.需求
正在開發的這個項目是一個電商類小程序,需求是給每個產品生成一個獨立的小程序二維碼
2.實現
瞭解了需求之後,開始查官方文檔,找到了下面這個接口,頁面地址:支付寶小程序生成二維碼
除公共請求參數外,需要的參數是這些,注意看第二個參數,這裏跟微信小程序的接口參數不太一樣,後面會說到
響應參數是這些,注意,支付寶小程序接口返回的是個圖片路徑,微信小程序接口則是直接返回圖片
因爲之前做過微信小程序生成小程序碼的功能,所以對整個流程有一定的瞭解,看了這個文檔之後發現與微信小程序生成小程序碼的流程區別不大,不過就比微信多傳了個describe參數而已(ps:我真是太天真),之前做的微信獲取小程序碼大致的流程分爲以下幾步:
- 1.調用官方接口,傳兩個參數,page:需要跳轉的小程序頁面路徑,scene:自定義的參數,格式爲key=value&key=value,也就是url以GET方式傳參的格式,來獲取二維碼數據,其實就是一個圖片
- 2.在自己寫的接口頁面輸出二維碼
- 3.在需要用到的地方調用自己寫的接口,顯示二維碼
有了這些於是我開始着手嘗試,我用的官方sdk
,比較方便,這裏我封裝成了一個函數,官方SDK傳送門
function.php
/**
* 獲取支付寶小程序碼
* @param string $page 小程序頁面路徑
* @param string $queryParam 小程序啓動參數
* @param string $describe 二維碼描述
* @return 圖片
*/
function getQrCodeAli($page = "",$queryParam ="" ,$describe ="")
{
// 使用官方sdk構造需要的參數
$aop = new AopClient ();
$aop->gatewayUrl = GATEWAY_URL;
$aop->appId = APPID_ALI;
$aop->rsaPrivateKey = RSA_PRIVATE_KEY;
$aop->alipayrsaPublicKey= RSA_PUBLIC_KEY;
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset='UTF-8';
$aop->format='json';
$request = new AlipayOpenAppQrcodeCreateRequest ();
$request->setBizContent("{" .
"\"url_param\":\"".$page."\"," .
"\"query_param\":\"".$queryParam."\"," .
"\"describe\":\"".$describe."\"" .
" }");
// 執行操作 請求對應的接口
$result = $aop->execute($request);
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if(!empty($resultCode)&&$resultCode == 10000){
// 請求接口返回的圖片路徑
echo httpGet($result->$responseNode->qr_code_url);
} else {
echo "失敗";
}
}
這裏我寫了一個接口文件,把header
設置爲image
,把圖片直接顯示出來
image.php
header("Content-Type:image/jpeg");
// 引入函數
require_once("function.php");
// 要跳轉的小程序頁面
$page = $_GET['page'];
//攜帶的參數
$scene = $_GET['scene'];
// 描述
$describe = $_GET['describe'];
echo getQrCodeAli($page,$scene,$describe);
3.問題
接着,訪問上面寫的接口,http://127.0.0.1/image.php?page=pages/index/index&scene=product_id=1&describe=111
,二維碼是出來了,掃描之後也進去了指定頁面,但是數據爲undefined,我第一時間懷疑是參數傳錯了,檢查了好幾遍,也沒發現問題所在,後臺找客服小馬哥,也無濟於事,不僅回覆慢,而且他也不太懂的樣子,還是得靠自己,於是開始了百度之旅,百度上關於支付寶生成二維碼的詞條很少,後來找到了一篇文章,令我恍然大悟,原來支付寶的參數是直接拼接在頁面路徑後面的,太坑了文章鏈接
4.解決
既然知道問題所在了就開始動手改代碼了,改成下面這種之後,親測可以使用
echo getQrCodeAli($page."?".$scene,$scene,$describe);