pay.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import Taro from "@tarojs/taro";
  2. import { getUserInfo } from "./login";
  3. type PublicData = {
  4. bookId: number,//小说ID
  5. bookParagraphId: number,//章节ID
  6. orderCondition: string,//支付场景
  7. }
  8. /**现金购买-预下单*/
  9. export function cashBuy(data: PublicData, callbackFn?: (b:boolean) => void) {
  10. return new Promise(async (resolve, reject) => {
  11. try {
  12. // 初始化
  13. Taro.request({
  14. url: '/app/pay/buyout',
  15. method: 'POST',
  16. data,
  17. success: async (res) => {
  18. let r = await whcatPay(res.data?.data?.wechatMchPayInfo)
  19. console.log("支付操作完成!!", r)
  20. callbackFn?.(true)
  21. resolve(r)
  22. },
  23. fail: (err) => {
  24. reject(err);
  25. }
  26. })
  27. } catch (error) {
  28. reject(error);
  29. }
  30. })
  31. }
  32. /**书币购买*/
  33. export function virtualBuy(data: PublicData, callbackFn?: (b:boolean) => void) {
  34. return new Promise(async (resolve, reject) => {
  35. try {
  36. // 初始化
  37. Taro.request({
  38. url: '/app/pay/buyOfCoin',
  39. method: 'POST',
  40. data,
  41. success: async (res) => {
  42. getUserInfo()//刷新个人信息
  43. callbackFn?.(true)
  44. resolve(res)
  45. },
  46. fail: (err) => {
  47. reject(err);
  48. }
  49. })
  50. } catch (error) {
  51. reject(error);
  52. }
  53. })
  54. }
  55. interface Data extends PublicData {
  56. rechargeTemplateId: number,//支付模板ID
  57. templateIndex: number,//下标
  58. }
  59. /**模板购买-预下单*/
  60. export function templateBuy(data: Data, callbackFn?: (b:boolean) => void) {
  61. return new Promise(async (resolve, reject) => {
  62. try {
  63. // 初始化
  64. Taro.request({
  65. url: '/app/pay/buyOfTemplate',
  66. method: 'POST',
  67. data,
  68. success:async (res) => {
  69. let r = await whcatPay(res.data?.data?.wechatMchPayInfo)
  70. console.log("支付操作完成!!", r)
  71. getUserInfo()//刷新个人信息
  72. callbackFn?.(true)
  73. resolve(r)
  74. },
  75. fail: (err) => {
  76. reject(err);
  77. }
  78. })
  79. } catch (error) {
  80. reject(error);
  81. }
  82. })
  83. }
  84. /**微信支付*/
  85. type WhcatPay = {
  86. timeStamp: string,//时间戳,从 1970 年 1 月 1 日 00:00:00 至今的秒数,即当前的时间
  87. nonceStr: string,//随机字符串,长度为32个字符以下
  88. package: string,//统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=***
  89. signType: any,//签名算法
  90. paySign: string,//签名
  91. }
  92. export function whcatPay(params: WhcatPay) {
  93. console.log("微信支付:", params)
  94. return new Promise(async (resolve, reject) => {
  95. try {
  96. // 初始化
  97. Taro.requestPayment({
  98. ...params,
  99. success: (res) => {
  100. console.log("支付成功:", res)
  101. Taro.showToast({
  102. title: '支付成功!',
  103. icon: 'success'
  104. });
  105. resolve(true)
  106. },
  107. fail: (err) => {
  108. console.log("支付失败:", err)
  109. if (err.errMsg === 'requestPayment:fail cancel') {
  110. Taro.showToast({
  111. title: '支付已取消!',
  112. icon: 'error'
  113. });
  114. } else {
  115. Taro.showToast({
  116. title: '支付失败,请重试!',
  117. icon: 'error'
  118. });
  119. }
  120. resolve(false)
  121. }
  122. })
  123. } catch (error) {
  124. reject(error);
  125. }
  126. })
  127. }