Golang 支付宝构建订单与退款

npm载入 “github.com/smartwalle/alipay/v3”

// 构建支付宝网页预支付订单

// 构建支付宝网页预支付订单
func AlipayGetWebOrder(Order_id string, Amount string, Name string)  {
	 
	//appId 支付宝应用id ; privateKey应用私钥,开发者自己生成 ;true为生产环境,false为沙箱环境
	aClient, err := alipay.New(appId, privateKey, true)
	if err != nil {
		log.Println("构建订单错误:", err)
	}
	err = client.LoadAliPayPublicKey(aliPublicKey)
	if err != nil {
		log.Println("初始化加载支付宝公钥错误:", err)
		return ""
	}

	var p = alipay.TradePagePay{}

	p.Subject = Name                         //商品名称
	p.OutTradeNo = Order_id                  //商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复
	p.TotalAmount = Amount                   //订单总金额,单位为元,精确到小数点后两位
	p.ProductCode = "FAST_INSTANT_TRADE_PAY" //支付宝签约的产品码名称。 App 支付时默认值为 QUICK_MSECURITY_PAY

	url, err := aClient.TradePagePay(p)
	if err != nil {
		log.Println("返回支付页面错误:", err)
		return ""
	}
    log.Println("支付页面地址:", url.String())
	 
}

// 构建支付宝APP预支付订单

// 构建支付宝APP预支付订单
func AlipayGetAppOrder(Order_id string, Amount string, Name string)   {
	
	client, err := alipay.New(appId, privateKey, true)
	if err != nil {
		log.Println("初始化支付宝客户端错误:", err)
		return ""
	}
	err = client.LoadAliPayPublicKey(aliPublicKey)
	if err != nil {
		log.Println("初始化加载支付宝公钥错误:", err)
		return ""
	}

	pay := alipay.TradeAppPay{}                         // page支付方式使用
	pay.NotifyURL = "https://xxx.xxx.com/notify_url" // 支付结果回调的url,注意内网穿透问题
	pay.ReturnURL = "https://xxx.xxx.com/return_url" // 支付成功后倒计时结束跳转的页面
	pay.Subject = Name                                  //商品名称
	pay.OutTradeNo = Order_id                           //传递一个唯一单号
	pay.TotalAmount = Amount                            //订单总金额,单位为元
	pay.ProductCode = "FAST_INSTANT_TRADE_PAY"          // page支付必须使用这个配置

	code, err := client.TradeAppPay(pay)
	if err != nil {
		log.Println("App支付接口错误:", err)
		return ""
	}
	log.Println("支付code :", code)
}

// 支付宝退款

// 支付宝退款
func AlipayGetRefund(Order_id string, Amount string, Name string)  {
	client, err := alipay.New(appId, privateKey, true)
	if err != nil {
		log.Println("支付宝退款 初始化支付宝客户端错误:", err)
		return obj
	}
	err = client.LoadAliPayPublicKey(aliPublicKey)
	if err != nil {
		log.Println("支付宝退款 初始化加载支付宝公钥错误:", err)
		return obj
	}

	pay := alipay.TradeRefund{}        //page支付方式使用
	pay.OutTradeNo = Order_id          //传递一个唯一单号
	pay.RefundAmount = Amount          //需要退款的金额
	pay.RefundReason = Name            //退款的原因说明
	pay.OutRequestNo = Order_id + "01" //退款ID
	data, err := client.TradeRefund(pay)
	if err != nil {
		log.Println("支付宝退款 App支付接口错误:", err)
		return obj
	}
 	log.Println("支付宝退款:", data)
	return obj
}

// 查询支付结果

// 查询支付结果
func QueryAliPay(Order_id string)  {
	 
	// 加载钥
	client, err := alipay.New(appId, privateKey, true)
	if err != nil {
		log.Println("查询支付结果 初始化支付宝客户端错误:", err)
		return obj
	}
	err = client.LoadAliPayPublicKey(aliPublicKey)
	if err != nil {
		log.Println("查询支付结果 初始化加载支付宝公钥错误:", err)
		return obj
	}
	 // 加载证书(可有可无)
   if err = client.LoadAppCertPublicKeyFromFile("./cert/aliPublicKey.crt"); err != nil {
      log.Println("加载证书发生错误", err)
      return
   }
   if err = client.LoadAliPayRootCertFromFile("./cert/alipayRootCert.crt"); err != nil {
      log.Println("加载证书发生错误", err)
      return
   }
   if err = client.LoadAlipayCertPublicKeyFromFile("./cert/alipayPublicCert.crt"); err != nil {
      log.Println("加载证书发生错误", err)
      return
   }
 
   if err = client.SetEncryptKey("C6iEav5UmeNCIpuSW0B+0g=="); err != nil {
      log.Println("加载内容加密密钥发生错误", err)
      return
   }
 	// 
	pay := alipay.TradeQuery{} // page支付方式使用
	pay.OutTradeNo = Order_id  //传递一个唯一单号

	data, err := client.TradeQuery(pay)
	if err != nil {
		log.Println("查询支付结果App支付接口错误:", err)
		return obj
	}

	
	log.Println("支付结果 :", data)

}

// 接收支付状态

// 接收支付状态
func AlipayPayNotify(Req *http.Request)  {
	 
	client, err := alipay.New(appId, privateKey, true)
	if err != nil {
		log.Println("查询支付结果 初始化支付宝客户端错误:", err)
		return nil
	}
	err = client.LoadAliPayPublicKey(aliPublicKey)
	if err != nil {
		log.Println("查询支付结果 初始化加载支付宝公钥错误:", err)
		return nil
	}
	 // 加载证书(可有可无)
   if err = client.LoadAppCertPublicKeyFromFile("./cert/aliPublicKey.crt"); err != nil {
      log.Println("加载证书发生错误", err)
      return
   }
   if err = client.LoadAliPayRootCertFromFile("./cert/alipayRootCert.crt"); err != nil {
      log.Println("加载证书发生错误", err)
      return
   }
   if err = client.LoadAlipayCertPublicKeyFromFile("./cert/alipayPublicCert.crt"); err != nil {
      log.Println("加载证书发生错误", err)
      return
   }
 
   if err = client.SetEncryptKey("C6iEav5UmeNCIpuSW0B+0g=="); err != nil {
      log.Println("加载内容加密密钥发生错误", err)
      return
   }
  //
	data, err := client.GetTradeNotification(Req)
	if err != nil {
		log.Fatalf("GetTradeNotification: %v", err)
		return nil
	}

	if err != nil {
		log.Fatalf("接收支付状态xx:%v", err)
		return nil
	}
	 
	fmt.Println("接收支付状态:", data)
	 
}

535 Views
分享你的喜爱
linwute
linwute

我要像梦一样自由,像大地一样宽容;
在艰辛放逐的路上,点亮生命的光芒;
我要像梦一样自由,像天空一样坚强;
在曲折蜿蜒的路上,体验生命的意义;

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注