调用支付宝接口生成小程序二维码的坑(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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章