調用支付寶接口生成小程序二維碼的坑(PHP)

引言:最近在開發支付寶小程序生成二維碼的時候碰到了一點問題,記錄一下

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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章