|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334 |
- package alipay
-
- import (
- "applet/app/cfg"
- "applet/app/md"
- "applet/app/utils/logx"
- "fmt"
-
- "github.com/iGoogle-ink/gopay"
- "github.com/iGoogle-ink/gopay/alipay"
- )
-
- func commClient(appID, priKey, RSA, PKCS string, paySet *md.PayData) (*alipay.Client, error) {
- client := alipay.NewClient(appID, priKey, true)
- client.DebugSwitch = gopay.DebugOn
- //判断密钥的类型
- rsaType := alipay.RSA2
- pkcsType := alipay.PKCS1
- if RSA == "1" {
- rsaType = alipay.RSA
- }
- if PKCS == "1" {
- pkcsType = alipay.PKCS8
- }
- if paySet.PayAliUseType == "1" {
- rsaType = alipay.RSA2
- pkcsType = alipay.PKCS8
- }
- //配置公共参数
- client.SetCharset("utf-8").
- SetSignType(rsaType).
- SetPrivateKeyType(pkcsType)
- //新支付宝支付
- if paySet.PayAliUseType == "1" {
- appCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + paySet.PayAppCertSn)
- if err != nil {
- return nil, err
- }
- if appCertSN == "" {
- return nil, err
- }
- client.SetAppCertSN(appCertSN)
- aliPayRootCertSN := "687b59193f3f462dd5336e5abf83c5d8_02941eef3187dddf3d3b83462e1dfcf6"
- client.SetAliPayRootCertSN(aliPayRootCertSN)
- aliPayPublicCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + paySet.PayAlipayrsaPublicKey)
- if err != nil {
- return nil, err
- }
- if aliPayPublicCertSN == "" {
- return nil, err
- }
- client.SetAliPayPublicCertSN(aliPayPublicCertSN)
- }
- return client, nil
- }
-
- //(实名证件信息比对验证预咨询)
- //https://opendocs.alipay.com/apis/api_2/alipay.user.certdoc.certverify.preconsult
- func UserCertverifyPreconsult(appID, priKey, userName, certNo, RSA, PKCS string, paySet *md.PayData) (*md.AlipayUserCertdocCertverifyPreconsult, error) {
- client, _ := commClient(appID, priKey, RSA, PKCS, paySet)
- //请求参数
- body := make(gopay.BodyMap)
- body.Set("user_name", userName)
- body.Set("cert_type", "IDENTITY_CARD")
- body.Set("cert_no", certNo)
- var aliPsp md.AlipayUserCertdocCertverifyPreconsult
- err := client.PostAliPayAPISelfV2(body, "alipay.user.certdoc.certverify.preconsult", aliPsp)
- if err != nil {
- return nil, err
- }
- return &aliPsp, err
- }
-
- //(实名证件信息比对验证咨询)
- //https://opendocs.alipay.com/apis/api_2/alipay.user.certdoc.certverify.consult
- func UserCertverifyConsult(appID, priKey, verifyId, RSA, PKCS string, paySet *md.PayData) (*md.AlipayUserCertdocCertverifyConsult, error) {
- client, _ := commClient(appID, priKey, RSA, PKCS, paySet)
- //请求参数
- body := make(gopay.BodyMap)
- body.Set("verify_id", verifyId)
- var aliPsp md.AlipayUserCertdocCertverifyConsult
- err := client.PostAliPayAPISelfV2(body, "alipay.user.certdoc.certverify.consult", aliPsp)
- if err != nil {
- return nil, err
- }
- return &aliPsp, err
- }
-
- // TradeAppPay is 支付宝APP支付
- // 抖音头条小程序使用APP调起
- func TradeAppPay(appID, priKey, subject, orderID, amount, notiURL, RSA, PKCS string, paySet *md.PayData) (string, error) {
- //初始化支付宝客户端
- // appID 是在支付宝申请的APPID
- // priKey 是支付宝私钥
- // subject 是支付订单的主题
- // orderID 是智莺这边生成的订单id
- // amount 是付费金额
- // notiURL 通知地址url
- // passback_params 回调通知参数
-
- client := alipay.NewClient(appID, priKey, true)
- client.DebugSwitch = gopay.DebugOn
- //判断密钥的类型
- rsa_type := alipay.RSA2
- pkcs_type := alipay.PKCS1
- if RSA == "1" {
- rsa_type = alipay.RSA
- }
- if PKCS == "1" {
- pkcs_type = alipay.PKCS8
- }
- if paySet.PayAliUseType == "1" {
- rsa_type = alipay.RSA2
- pkcs_type = alipay.PKCS8
- }
- //配置公共参数
- client.SetCharset("utf-8").
- SetSignType(rsa_type).
- SetPrivateKeyType(pkcs_type)
- if notiURL != "" {
- client.SetNotifyUrl(notiURL)
- }
- //新支付宝支付
- if paySet.PayAliUseType == "1" {
- appCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + paySet.PayAppCertSn)
- fmt.Println("-应用-")
- fmt.Println(appCertSN)
- if err != nil {
- fmt.Println(err)
- return "", err
- }
- if appCertSN == "" {
- fmt.Println(err)
- return "", err
- }
- client.SetAppCertSN(appCertSN)
- //aliPayRootCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + paySet.PayAlipayRootCertSn)
- aliPayRootCertSN := "687b59193f3f462dd5336e5abf83c5d8_02941eef3187dddf3d3b83462e1dfcf6"
- client.SetAliPayRootCertSN(aliPayRootCertSN)
- aliPayPublicCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + paySet.PayAlipayrsaPublicKey)
- fmt.Println("-公钥-")
- fmt.Println(aliPayPublicCertSN)
-
- if err != nil {
- fmt.Println(err)
- return "", err
- }
- if aliPayPublicCertSN == "" {
- fmt.Println(err)
- return "", err
- }
- client.SetAliPayPublicCertSN(aliPayPublicCertSN)
- }
- fmt.Println(client)
- //请求参数
- body := make(gopay.BodyMap)
- body.Set("subject", subject)
- body.Set("body", subject)
- body.Set("out_trade_no", orderID)
- body.Set("total_amount", amount)
- body.Set("timeout_express", "30m")
-
- // body.Set("passback_params", orderID)
- //手机APP支付参数请求
- payParam, err := client.TradeAppPay(body)
- if err != nil {
- return "", logx.Warn(err)
- }
- return payParam, nil
- }
-
- // TradeAppPay is 支付宝H5支付
- func TradeWapPay(appID, priKey, subject, orderID, amount, notiURL, RSA, PKCS, page_url string, paySet *md.PayData) (string, error) {
- //aliPayPublicKey := "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1wn1sU/8Q0rYLlZ6sq3enrPZw2ptp6FecHR2bBFLjJ+sKzepROd0bKddgj+Mr1ffr3Ej78mLdWV8IzLfpXUi945DkrQcOUWLY0MHhYVG2jSs/qzFfpzmtut2Cl2TozYpE84zom9ei06u2AXLMBkU6VpznZl+R4qIgnUfByt3Ix5b3h4Cl6gzXMAB1hJrrrCkq+WvWb3Fy0vmk/DUbJEz8i8mQPff2gsHBE1nMPvHVAMw1GMk9ImB4PxucVek4ZbUzVqxZXphaAgUXFK2FSFU+Q+q1SPvHbUsjtIyL+cLA6H/6ybFF9Ffp27Y14AHPw29+243/SpMisbGcj2KD+evBwIDAQAB"
- privateKey := priKey
- //判断密钥的类型
- rsa_type := alipay.RSA2
- pkcs_type := alipay.PKCS1
- if RSA == "1" {
- rsa_type = alipay.RSA
- }
- if PKCS == "1" {
- pkcs_type = alipay.PKCS8
- }
- if paySet.PayAliUseType == "1" {
- rsa_type = alipay.RSA2
- pkcs_type = alipay.PKCS8
- }
- //初始化支付宝客户端
- // appId:应用ID
- // privateKey:应用秘钥
- // isProd:是否是正式环境
- client := alipay.NewClient(appID, privateKey, true)
- //配置公共参数
- client.SetCharset("utf-8").
- SetSignType(rsa_type).
- SetPrivateKeyType(pkcs_type).
- SetReturnUrl(page_url).
- SetNotifyUrl(notiURL)
- //新支付宝支付
- if paySet.PayAliUseType == "1" {
- appCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + paySet.PayAppCertSn)
- if err != nil {
- fmt.Println(err)
- return "", err
- }
- if appCertSN == "" {
- fmt.Println(err)
- return "", err
- }
- client.SetAppCertSN(appCertSN)
- //aliPayRootCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + paySet.PayAlipayRootCertSn)
- //if err != nil {
- // fmt.Println(err)
- // return "", err
- //}
- //if aliPayRootCertSN == "" {
- // fmt.Println(err)
- // return "", err
- //}
- aliPayRootCertSN := "687b59193f3f462dd5336e5abf83c5d8_02941eef3187dddf3d3b83462e1dfcf6"
- client.SetAliPayRootCertSN(aliPayRootCertSN)
- aliPayPublicCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + paySet.PayAlipayrsaPublicKey)
- if err != nil {
- fmt.Println(err)
- return "", err
- }
- if aliPayPublicCertSN == "" {
- fmt.Println(err)
- return "", err
- }
- client.SetAliPayPublicCertSN(aliPayPublicCertSN)
- }
- //请求参数
- body := make(gopay.BodyMap)
- body.Set("subject", subject)
- body.Set("out_trade_no", orderID)
- // quit_url is 用户付款中途退出返回商户网站的地址
- body.Set("quit_url", notiURL)
- body.Set("total_amount", amount)
- // product_code is 销售产品码,商家和支付宝签约的产品码
- body.Set("product_code", "QUICK_WAP_WAY")
- //手机网站支付请求
- payUrl, err := client.TradeWapPay(body)
- if err != nil {
- return "", logx.Warn(err)
-
- }
- return payUrl, nil
- }
-
- // TradeAppPay is 支付宝小程序本身支付
- func TradeCreate(appID, priKey, subject, orderID, amount, notiURL, RSA, PKCS string, paySet *md.PayData) (*alipay.TradeCreateResponse, error) {
- //aliPayPublicKey := "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1wn1sU/8Q0rYLlZ6sq3enrPZw2ptp6FecHR2bBFLjJ+sKzepROd0bKddgj+Mr1ffr3Ej78mLdWV8IzLfpXUi945DkrQcOUWLY0MHhYVG2jSs/qzFfpzmtut2Cl2TozYpE84zom9ei06u2AXLMBkU6VpznZl+R4qIgnUfByt3Ix5b3h4Cl6gzXMAB1hJrrrCkq+WvWb3Fy0vmk/DUbJEz8i8mQPff2gsHBE1nMPvHVAMw1GMk9ImB4PxucVek4ZbUzVqxZXphaAgUXFK2FSFU+Q+q1SPvHbUsjtIyL+cLA6H/6ybFF9Ffp27Y14AHPw29+243/SpMisbGcj2KD+evBwIDAQAB"
- privateKey := priKey
- rsa_type := alipay.RSA2
- pkcs_type := alipay.PKCS1
- if RSA == "1" {
- rsa_type = alipay.RSA
- }
- if PKCS == "1" {
- pkcs_type = alipay.PKCS8
- }
- if paySet.PayAliUseType == "1" {
- rsa_type = alipay.RSA2
- pkcs_type = alipay.PKCS8
- }
- //初始化支付宝客户端
- // appId:应用ID
- // privateKey:应用私钥,支持PKCS1和PKCS8
- // isProd:是否是正式环境
- client := alipay.NewClient(appID, privateKey, true)
- //配置公共参数
- client.SetCharset("utf-8").
- SetSignType(rsa_type).
- SetPrivateKeyType(pkcs_type).
- SetNotifyUrl(notiURL)
- if paySet.PayAliUseType == "1" {
- appCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + paySet.PayAppCertSn)
- if err != nil {
- fmt.Println(err)
- return nil, err
- }
- if appCertSN == "" {
- fmt.Println(err)
- return nil, err
- }
- client.SetAppCertSN(appCertSN)
- //aliPayRootCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + paySet.PayAlipayRootCertSn)
- //if err != nil {
- // fmt.Println(err)
- // return nil, err
- //}
- //if aliPayRootCertSN == "" {
- // fmt.Println(err)
- // return nil, err
- //}
- aliPayRootCertSN := "687b59193f3f462dd5336e5abf83c5d8_02941eef3187dddf3d3b83462e1dfcf6"
- client.SetAliPayRootCertSN(aliPayRootCertSN)
- aliPayPublicCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + paySet.PayAlipayrsaPublicKey)
- if err != nil {
- fmt.Println(err)
- return nil, err
- }
- if aliPayPublicCertSN == "" {
- fmt.Println(err)
- return nil, err
- }
- client.SetAliPayPublicCertSN(aliPayPublicCertSN)
- }
- //请求参数
- body := make(gopay.BodyMap)
- body.Set("subject", subject)
- // 支付宝小程序支付时 buyer_id 为必传参数,需要提前获取,获取方法如下两种
- // 1、alipay.SystemOauthToken() 返回取值:rsp.SystemOauthTokenResponse.UserId
- // 2、client.SystemOauthToken() 返回取值:aliRsp.SystemOauthTokenResponse.UserId
- buyer_id, err := client.SystemOauthToken(body)
- if err != nil {
- return nil, logx.Warn(err)
- }
- body.Set("buyer_id", buyer_id)
- body.Set("out_trade_no", orderID)
- body.Set("total_amount", amount)
- //创建订单
- aliRsp, err := client.TradeCreate(body)
-
- if err != nil {
- return nil, logx.Warn(err)
- }
- logx.Warn("aliRsp:", *aliRsp)
- logx.Warn("aliRsp.TradeNo:", aliRsp.Response.TradeNo)
- return aliRsp, nil
-
- }
|