收藏
回答

小程序云开发支付,没有我自己的服务器。怎样用一个云函数收到支付回调通知?

我的小程序纯粹云开发,用云数据库,没有自己的服务器。

业务需求:微信购物,支付,成功后更改商品状态(比如“待支付”变成“已支付”)。

目前用的是这个tenpay (https://blog.csdn.net/qiushi_1990/article/details/99347580),完成下单,其实tenpay背后应该是用了“统一下单API (https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1)”,可以指定一个“通知地址 notify_url 参数”但是必须是我自己的服务器网址,比如http://hello-world.com/。但是我没有自己的服务器,也就意味着我无法获得用户支付成功的通知,也不能靠这个来触发回调函数(比如更改商品状态)。

客户端支付的代码是这个API: https://developers.weixin.qq.com/miniprogram/dev/api/open-api/payment/wx.requestPayment.html。在这个客户端我可以写一个支付成功的success回调函数,比如

success(){
    /* 从客户端触发云函数,更改商品状态为“已支付” */
    call_cloud_function_to_change_products_to_paid_status();
}

如果这样做就意味着第一步:用户A进行了支付。第二步:用户A自己通知后台“我已经付了钱了。请发货。”由于这2步代码都在前端,那么黑客岂不是可以直接触发第二步函数,骗商家发货。理想方法应该是第一步:用户A支付。第二步:腾讯主动触发我的云函数X,通知我继续发货等。请问该怎么解决我的问题?

另外,我也注意到,如果用CloudPay.unifiedOrder() https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/open/pay/CloudPay.unifiedOrder.html 则可以指定一个云函数作为支付成功后的回调,但是它需要 sub_mch_id (子商户号)而不能用 mch_id 或 merchant_id (商户号)。目前我的情况是只有一个商户号,没有子商户号。我是否应该去弄一个子商户号?

回答关注问题邀请回答
收藏

2 个回答

  • 老张
    老张
    2020-12-06

    1、qcloud.com

    2、登录方式:公众号授权;选该小程序身份;

    3、cloudbase,选择某云环境;

    4、http接入,新建一个接入,关联你接收微信支付成功通知的云函数,拷贝该http接入的url,将notify_url设置为该接入的url

    另:CloudPay.unifiedOrder里,将你的商户号直接填在sub_mch_id里,就能跑通了。(需要在云开发控制台先开通云支付功能)

    建议不要再用你上面的代码方式了,完全没有必要了,CloudPay已经完全可以替换云函数里的V2支付了,除非你有特殊接口要求;

    2020-12-06
    有用 1
    回复 9
    • VICVV
      VICVV
      2020-12-13
      我试了直接用 商户号 作为 sub_mch_id (子商户号),得到
      2020-12-13
      回复
    • VICVV
      VICVV
      2020-12-13
      另外,如何“在云开发控制台先开通云支付功能”?我找到了“设置”-“全局设置”-“云函数接收消息推送”,但是下面是空的(没有其他关于支付的设置,比如这篇文章的图例  https://www.cnblogs.com/CloudBase/p/12906635.html 有“微信支付配置”,但是我的界面看不到这个“微信支付配置”)。我是否必须新申请一个“子商户号”呢?
      2020-12-13
      回复
    • 老张
      老张
      2020-12-13回复VICVV
      1、小程序开通了支付功能没有?
      2、不要贴别人的图,要贴你的,你的云控制台是什么样的。
      2020-12-13
      回复
    • VICVV
      VICVV
      2020-12-14
      登陆商户平台 https://pay.weixin.qq.com/index.php/core/account/info 可见:


      基本账户信息
      微信支付商户号: 1********8
      商户类型: 普通商户


      https://pay.weixin.qq.com/index.php/extend/product/lists?tid=3 “产品中心” - “我的产品” - “已开通” 板块可见:JSAPI支付


      这应该说明“微信支付是开通了的”,对吧?但是在微信开发工具-云开发界面-“设置”-“全局设置”,如图,底下是空的。期望是有一个“微信支付配置”板块。
      另外,如原帖所说,我目前只有“商户号”,没有“子商户号”。我的代码用了老版本(v2 API),目前是可用的,微信支付也是可以在手机上正常发起,输入密码,并看到“支付成功”界面的。主要问题是关于腾讯收到钱之后给我回调通知。
      我也注意到: https://blog.csdn.net/qq_18881987/article/details/94428628 提到sub_mch_id 是“特约商户号”,那我这个只有“普通商户”是不行了?
      哪里出了问题?
      2020-12-14
      回复
    • VICVV
      VICVV
      2020-12-14
      我发现了这个API https://api.mch.weixin.qq.com/pay/orderquery “该接口提供所有微信支付订单的查询,商户可以通过该接口主动查询订单状态,完成下一步的业务逻辑。”对我会很有用。但也需要sub_mch_id子商户号
      https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_sl_api.php?chapter=9_2
      很有意思,这个链接也是相关话题,却不需要sub_mch_id子商户号:
      https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_2
      这是怎么回事?
      2020-12-14
      回复
    查看更多(4)
  • Why not?
    Why not?
    2020-12-06

    2020-12-06
    有用
    回复 3
    • VICVV
      VICVV
      2020-12-13
      我试了直接用 商户号 作为 sub_mch_id (子商户号),得到
      2020-12-13
      回复
    • VICVV
      VICVV
      2020-12-13
      这个错误正如https://zhuanlan.zhihu.com/p/164983524所说。那么我在下面留言也提到,我的云控制台并没有任何“微信支付配置”板块,我应该下一步怎么办?
      2020-12-13
      回复
    • Why not?
      Why not?
      2020-12-14回复VICVV
      可能你的开发工具版本较低?
      2020-12-14
      回复
登录 后发表内容
问题标签